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.

→ Ссылка