Форум программистов, компьютерный форум CyberForum.ru

Переполнение стека в рекурсивной функции сортировки большого массива - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ При помощи массива посчитать количество выплат в каждом из диапазонов http://www.cyberforum.ru/cpp-beginners/thread1144058.html
Доброго времени суток. Решаю задачу из книги, суть ее такова: работникам платят определенную зарплату от $200 и выше. Надо при помощи массива посчитать количество выплат в каждом из диапазонов $200-$299, $300-$399 и т.д.(до 1000, все что больше 1000 в одну ячейку массива). Программу написал, ток выдает не правильные результаты(не правильное кол-во звездочек печатает) Ниже код, подскажите где...
C++ Математическое выражение в программе я не понимаю что значит после V ноль и этот ноль будет 3 раза изменен на 1 2 3 (он в цикле while) x={V}_{0}tcosa 1)объясните что означает после V ноль 2)запишите в стиле С + + это x={V}_{0}tcosa (можно без цикла сам с ним разберусь) http://www.cyberforum.ru/cpp-beginners/thread1144046.html
Односвязные списки. Удаление элементов с условием C++
Здравствуйте! Совершенно не понимаю. каким образом происходит удаление. Могу понять, что должно быть сделано, но трудности с реализацией в коде. Задание звучит следующим образом : Удалить абонентов, телефонный номер которых начинается с 3. Я заполняю список до 5-ти человек, а дальше у меня не работает функция сортировки. Помогите, пожалуйста, разобраться. using namespace std; struct...
C++ Вычитание комплексных чисел, как доделать?
Необходимо описать структуру с заданным именем, полями и содержащую следующие методы: Read – ввод с клавиатуры. Init – проверка корректности значений полей. Display – вывод на экран данных из структуры в «правильном виде». #include <iostream> #include <cmath> using namespace std;
C++ Перед каждым четным по номеру слову вставить слово mama http://www.cyberforum.ru/cpp-beginners/thread1144029.html
Дана строка, состоящая из слов, разделенных пробелами и заканчивающаяся точкой. Перед каждым четным по номеру слову вставить слово mama/
C++ Использование пространства имен. С++ Помогите с программой Описать указанные типы данных и поместить их в отдельный заголовочный файл. Аналогично поступить с функциями. Реализацию функций выполнить в отдельном файле. Типы данных и функции разместить в соответствующем пространстве имен. Написать программу, использующую описанные типы данных: инициализация переменных (ввод пользователя), выполнение действий (в зависимости от... подробнее

Показать сообщение отдельно
NEvOl
14 / 13 / 0
Регистрация: 13.08.2012
Сообщений: 685
11.04.2014, 00:32  [ТС]     Переполнение стека в рекурсивной функции сортировки большого массива
переделал алгоритм в итеративный вариант, но все равно медленно как-то, может кто-нибудь подскажет что не так ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
void Sort(photon *p, int b, int e)
{
    vector<XMFLOAT2> stack;
    int ind = p[e].pos.z;
    int sI = e;
    int j = e-1;
    bool s(0);
 
    do
    {
        for(int i = b; i < e; i++)
        {
            j = e-1;
            ind = p[e].pos.z;
            if(p[i].pos.z >= ind)
            {
                while(p[j].pos.z >= ind && j > i)
                {
                    j--;
                }
                if(j > i)
                {
                    photon a = p[i];
                    p[i] = p[j];
                    p[j] = a;
                    sI = i+1;
                }
                else
                    break;
            }
        }
        for(int i = b; i <= e; i++)
        {
            if(p[i].pos.z >= ind)
            {
                photon a = p[i];
                p[i] = p[e];
                p[e] = a;
                sI = i;
                if(e - i > 1)
                    stack.push_back(XMFLOAT2(sI+1, e));
                break;
            }
        }
 
        if(sI-b <= 1 && stack.size() > 0)
        {
            b = stack[stack.size()-1].x;
            e = stack[stack.size()-1].y;
            stack.pop_back();
            continue;
        }
 
        e = sI - 1;
 
 
    }while(e-b >= 1 || stack.size() != 0);
 
}
 
Текущее время: 08:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru