20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
|
||||||
1 | ||||||
Переполнение стека в рекурсивной функции сортировки большого массива09.04.2014, 23:04. Показов 4443. Ответов 28
Метки нет (Все метки)
Написал рекурсивную функцию сортировки массива, с массивами небольших размеров все работает как надо, а вот если сортирую побоьлше (60000 элементов) то выскакиевает исключение
Unhandled exception at 0x01017A2A in Filtering.exe: 0xC00000FD: Stack overflow (parameters: 0x00000001, 0x00292FFC). подскажите пожалуйста что не так, а то первый раз сталкиваюсь с этим, вот код функции:
0
|
09.04.2014, 23:04 | |
Ответы с готовыми решениями:
28
Переполнение стека при вызове рекурсивной функции При обращении к процедуре рекурсивной быстрой сортировки происходит переполнение стека Переполнение стека при рекурсивной сортировке Использование рекурсивной функции для сортировки массива по возрастанию |
18842 / 9841 / 2409
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
10.04.2014, 17:34 | 21 |
taras atavin, то есть ты отрицаешь факт того, что быстрая сортировка может быть реализована через рекурсию?
0
|
20 / 20 / 8
Регистрация: 10.02.2013
Сообщений: 75
|
|
10.04.2014, 17:37 | 22 |
0
|
Будущее рядом
101 / 100 / 48
Регистрация: 06.03.2014
Сообщений: 342
|
|
10.04.2014, 17:40 | 23 |
Скорее всего уже говорили, но в таких случаях лучше передавать указатели на массив.
0
|
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
|
||||||
11.04.2014, 00:32 [ТС] | 24 | |||||
переделал алгоритм в итеративный вариант, но все равно медленно как-то, может кто-нибудь подскажет что не так ?
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
11.04.2014, 05:36 | 25 |
Большой массив нельзя отсортировать быстро, в худшем случае он сортируется очень медленно, в лучшем просто медленно. Это неизбежно от ресурсоёмкости самой задачи и любой рост быстродействия только только отодвинет планку размера массива.
0
|
20 / 20 / 8
Регистрация: 10.02.2013
Сообщений: 75
|
|
11.04.2014, 09:35 | 26 |
А какое у тебя максимальное значение в массиве? Если оно достаточно мало (относительно количеству элементов массива), то можно отсортировать за линейное время сортировкой подсчетом.
0
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
|
11.04.2014, 10:24 | 27 |
А топикстартеру же можно дать совет использовать оптимизацию хвостовой рекурсии, современные компиляторы её поддерживают
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
11.04.2014, 12:01 | 28 |
Ога. Вместо деления большого массива на маленькие рост подмассива, пока он не станет тождествен всему массиву. Ну очень рекурсивно. Ещё внешнюю сортировку вспомни, отчётливо воняющую итерациями через буфер.
Добавлено через 5 минут Кроме того, простота разработки - вообще не фактор качества оси. Как раз с позиции разработчика приложений я и предпочитаю винду, но ось должна быть простой не для разработчика чего бы то ни было, а для пользователя, тем более если она не позиционируется на рынке, подобно фотону, как ось только для профессионалов.
0
|
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
|
|
11.04.2014, 14:30 [ТС] | 29 |
d1skort, значения в массиве произвольные, ну в разумных приделах к примеру [-1000; 1000]
0
|
11.04.2014, 14:30 | |
11.04.2014, 14:30 | |
Помогаю со студенческими работами здесь
29
Переполнение стека при первом же вызове функции Переполнение стека при вызове функции из Dll Переполнение стека при создании трехмерного массива Сортировка двумерного массива (переполнение стека, что делать?) Не получается перевести с с++ на паскаль алгоритм рекурсивной быстрой сортировки массива "Программа завершена из-за переполнения программного стека" при работе рекурсивной функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |