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;