delphi 堆排序类

delphi 堆排序类

procedure HeapAdjust(var N: array of integer; I, IntLen: integer);
var
  IntTmp, IntChild: integer;
begin
  IntTmp := N[I];
  IntChild := 2 * I + 1;
  while IntChild < IntLen do
  begin
    if (IntChild + 1 < IntLen) and (N[IntChild] < N[IntChild + 1]) then
    begin
      IntChild := IntChild + 1;
    end;
    if N[I] < N[IntChild] then
    begin
      N[I] := N[IntChild];
      I := IntChild;
      IntChild := 2 * I + 1;
    end
    else
    begin
      break;
    end;
    N[I] := IntTmp;
  end;
end;

procedure BuildHeap(var N: array of integer);
var
  I: integer;
begin
  for I := high(N) div 2 downto 0 do
  begin
    HeapAdjust(N, I, High(N) + 1);
  end;
end;

procedure HeapSort(var X: array of integer);
var
  I, IntTmp: integer;
begin
  BuildHeap(X);
  for I := high(X) downto 0 do
  begin
    IntTmp := X[I];
    X[I] := X[0];
    X[0] := IntTmp;
    HeapAdjust(X, 0, I);
  end;
end;

猜你喜欢

转载自blog.csdn.net/fkzxf/article/details/105949863