Помощь - Поиск - Пользователи - Календарь
Полная версия: задача про сортировки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
zzq
Народ, помогите пажалуста прогу сделать(TP7)..
1. объясните почему при сортировке массива включением и быстрым методами у меня переполняется стэк, как это исправить??
2. а в двоичном поиске пишет, что элемент находится на нулевой позиции..

З.ы. Паскаль начал изучать совсем недавно, поэтому сложные алгоритмы подробно(по возможности) опишите..
Свои версии проги кидайте на мыло: <...> ..Заранее спасибо!!
З.з.ы. Господа модераторы, не серчайте и не судите строго, если что не так..

Это по-твоему форум или доска объявлений? Правила читал?
volvo
А при каком размере массива у тебя происходит Stack Overflow? Вообще-то стек в TP автоматически устанавливается в 16К, можно увеличить до 64К, но при размере массива, например, в 10000, это тебя не спасет...
zzq
..ошибку выдаёт даже при 12 элементах, а мне 10000 надо как минимум..пробовал различные версии сортировок, и везде стэк переполняется..не пойму почему в этих двух сортировках он переполняется, а скажем в пузырьбке или выборе 15000 сортирует без проблем??..может как-то нужно проводить очистку стэка перед запуском п/п..стэк переполняется на слове begin в начале п/п..

З.ы. канечно же не доска объявлений, а разве запрещено опубликовывать своё мыло, или это только в раздел "..на заказ"?? ..кстати правила форума у вас не работают..
volvo
Не в стеке дело...

У тебя просто процедура быстрой сортировки (я пока только ее проверил) не совсем корректно написана, и зацикливается... Вот тебе пример НЕзацикливающейся процедуры Quick:
Procedure Quick(Var sorted: mas;
min, max: integer);

Function Incr(Var x: Integer): Integer;
Begin Inc(x); Incr := x End;
Function Decr(Var x: Integer): Integer;
Begin Dec(x); Decr := x End;

Procedure SwapIndex(i, j: Integer);
Var T: Integer;
Begin
T := sorted[i]; sorted[i] := sorted[j]; sorted[j] := T;
End;

Var
i: Integer;

Procedure qSort(pLow, pHigh: Integer);
Var
iHi, iLo: Integer;
T: Integer;
Begin
If pLow < pHigh Then
Begin
iLo := pLow;
iHi := pHigh + 1;
T := sorted[pLow];

While True Do
Begin
While sorted[Incr(iLo)] < T Do ;
While sorted[Decr(iHi)] > T Do ;

If iLo < iHi Then
SwapIndex(iLo, iHi)
Else Break
End;

SwapIndex(pLow, iHi);
qSort(pLow, iHi - 1);
qSort(iHi + 1, pHigh);
End;
End;

Begin
qSort(min, max);
End;

Подставь ее вместо своей и будет тебе счастье...

Чуть позже посмотрю и остальные методы...

P.S. Читай Правила Форума (пункт 1.12)
zzq
остальные я уже сделал, а быстрый метод теперь 1024 сортирует, а дальше не хочет, та же ошибка.. а главное когда кроме неё(quick sort) блольше никаких процедур нет, все работает..а как время вставляю - все..

..щас твою попробую подставить..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.