谁有pascal堆排序的原程序以及详细的注释

来源:百度知道 编辑:UC知道 时间:2024/05/15 19:54:23
正常文件输入,给一个n和n个数,用堆排排序,注意,我要有很详细的注释

var a:array[0..400000]of longint;
i,n:longint;
procedure headup(v:longint);
var t:longint;
begin
if (v>1)and(a[v]<a[v div 2]) then
begin
t:=a[v]; a[v]:=a[v div 2]; a[v div 2]:=t;
headup(v div 2);
end;
end;
procedure headdown(v:longint);
var t:longint;
begin
if (v*2<=i-1) then
begin
if (v*2<i-1) then
begin
if a[v*2]<a[v] then
begin
if a[v*2+1]<a[v] then
begin
if a[v*2]<a[v*2+1] then
begin
t:=a[v];a[v]:=a[v*2]; a[v*2]:=t;
headdown(v*2);
end
else
begin
t:=a[v];a[v]:=a[v*2+1]; a[v*2+1]:=t;
headdown(v*2+1);
end;
end
else
begin
t:=a[v];a[v]:=a[v*2]; a[v*2]:=t;
headdown(v*2);