Heap Sort(сортировка кучей)
попытался написать heap sort, но возникли ошибки, помогите, пожалуйста.
Program Heapsort;
{$APPTYPE CONSOLE}
Const
N = 10;
Type TArray = Array[1..N] of Integer;
//Процедура для перессылки записей
Procedure Swap(Var X, Y: Integer);
Var Temp: Integer;
Begin
Temp:=X;
X:=Y;
Y:=Temp
End;
Procedure Sift(Var L: Integer; R: Integer);
Var I, J, x: Integer;
A: TArray;
Begin
i:=L;
j:=2*L;
x:=A[L];
if (j<R) and (A[j]<A[j+1]) then
Inc(j);
while (j<=R) and (x<A[j]) do
Begin
A[i]:=A[j];
A[j]:=x;
i:=j; j:=2*j; x:=A[i];
if (j<R) and (A[j]<A[j+1]) then
Inc(j);
End;
End;
//Основная программа
Var A: TArray;
L, R, I: Integer;
Begin
Randomize;
for I:=1 to N do
Begin
A[I]:=Random(500);
write(A[I]:4)
End;
L:=(N div 2)+1;
R:=N;
while L>1 do
Begin
Dec(L);
Sift(L,R)
End;
while R>1 do
Begin
Swap(A[1],A[R]);
Dec(R);
Sift(L,R)
End;
writeln;
writeln('----------------------------------------');
writeln(' Sorting');
writeln('----------------------------------------');
for I:=1 to N do
write(A[I]:4);
readln;
End.
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
В процедуре Sift есть локальный массив A.
Вот она в нём и копается, а настоящий массив не трогает.
Передавайте массив аргументом (не забыв убрать локальную переменную)
Procedure Sift(Var A: TArray;...
Кроме того, мне сомнительно, что аргумент L этой же процедуры должен быть с var.