
06.06.2008, 17:23
|
|
Познающий
Регистрация: 31.08.2007
Сообщений: 94
Провел на форуме: 422909
Репутация:
200
|
|
Народ помогите решить проблему ! Вообщем приведенная ниже программа должна сортировать массив рандомных чисел ПИРАМИДАЛЬНЫМ методом.... Вообщем она и сортирует вот только чаще всего выбивает STACK OVERFLOV.... я там уже и функцию проверки на сортировку кинул штобы не вращалось слишком много и всеравно облом .... Вообщем код ниже кто сможет подправить укажите ошибку исправленным кодом !!!
У тебя ошибка на ошибке. Вот смотри, зачем делать HeapSort процедурой? Ведь ей нужно передавать массив! Поэтому она должна быть функцией. И не зачем было делать Anti_Overflow. То есть:
//переделываем на функцию
Код:
function HeapSort( arr : myArray; size : Integer ):myArray;
Var i, L, R : Integer;
item : Integer;
Begin
L := ( size div 2 );
R := size - 1 ;
While L > 0 do
Begin
L := L - 1;
Sift( arr, L, R );
End;
While R > 0 do
Begin
item := arr[0];
arr[0] := arr[R];
arr[R] := item;
R := R - 1;
Sift( arr, L, R );
End;
heapsort:=arr;
End;
// и рендомное заполнение массива переделай:
Код:
ClrScr;
Write('Vvedite rozmirnist'' massiva : ');
ReadLn( dimension );
writeln;
writeln('************************************************');
Write('Ishodnii massiv iz ');Write( dimension );Write(' elementov: ');
Randomize;
For i := 0 To dimension-1 Do
Begin
arr[i] := Random(50);
Write(arr[i]);write(' ');
End;
writeln;
writeln('************************************************');
SortArray:=HeapSort( arr , dimension );
write('Otsortirovanii massiv : ');
for i := 0 to dimension-1 do begin
write( sortArray[i] ); write(' '); end;
writeln;
writeln('************************************************');
writeln;
WriteLn('Press "Enter" to continue...');
Readln;
Readln;
P.s. МаССив пишется с двумя с ... Надо увОжать русский язык 
Последний раз редактировалось A2GIL; 06.06.2008 в 17:25..
|
|
|