Sortowanie przez kopcowanie Cormen - problem

0

Napisalem z Cormena Sortowanie przez kopcowanie, ale nie sortuje wcale. Nie wiem gdzie jest błąd. Proszę o pomoc.

uses crt;
const
  max = 10

type
  tab = array [1 .. max] of integer;

  procedure MAXHEAPIFY(var A: tab; n: integer; i: integer);
  var
    l, r, largest: integer;
    tmp: integer;
  begin
    l := (2 * i);
    r := (2 * i) + 1;

    if ((l <= n) and (A[l] > A[i])) then
      largest := l
    else
      largest := i;

    if ((r <= n) and (A[r] > A[largest])) then
      largest := r;

    if (largest <> i) then
    begin
      tmp := A[i];
      A[i] := A[largest];
      A[largest] := tmp;
      MAXHEAPIFY(A, n, largest);
    end;
  end;

  procedure BUILDHEAP(var A: tab; n: integer);
  var
    i: integer;
  begin
    for i := (n div 2) downto 1 do
      MAXHEAPIFY(A, n, i);
  end;

  procedure HEAPSORT(var A: tab; n: integer);
  var
    tmp, hsize, i: integer;
  begin
    BUILDHEAP(A, n);
    hsize := n;

    for i := n downto 2 do
    begin
      tmp := A[1];
      A[1] := A[i];
      A[i] := tmp;
      hsize := n - 1;
      MAXHEAPIFY(A, hsize, 1);
    end;
  end;

var
  a: integer;
  B: tab;
begin
  clrscr;
  randomize;

  for a := 1 to max do
  begin
    B[a] := random(max);
    writeln(B[a]);
  end;
  
  writeln;
  HEAPSORT(B, max);
  writeln;

  for a := 1 to max do
    writeln(B[a]);
end.
0

Wiem że temat ma ok 3.5 roku ale nikt nie odpowiedział
a poza tym ja też miałbym pytanie do pseudokodu Cormena

Można obejść się bez zmiennej hsize ale jeśli już jej używamy to w pętli z linii 48. powinna przyjmować ona wartość hsize:=hsize-1 (lub ewentualnie Dec(hsize))

Poza tym mnie zastanawia jak zamienić rekurencję na pętlę tak aby wyjście z pętli było sterowane warunkiem logicznym a nie instrukcją break

1 użytkowników online, w tym zalogowanych: 0, gości: 1