16号铁丝一米多重:堆排序的源代码

来源:百度文库 编辑:高校问答 时间:2024/04/20 18:08:57
有谁能帮忙写一下PASCAL版的源代码??
万分感谢!!!!!!!!!!!!!!

type datalist=array of longint;
//堆排序的过滤
procedure sift(data:datalist;k,m:longint);
var i,j,x:longint;
finished:boolean;
begin
i:=k;
j:=2*i;
x:=data[k];
finished:=false;
while (j<=m) and not finished do
begin
if (j<m) and (data[j]<data[j+1]) then
j:=j+1;
if x>=data[j] then
finished:=true
else
begin
data[i]:=data[j];
i:=j;
j:=i*2;
end;
end;
data[i]:=x;
end;

//堆排序
//data是待排序数组,n是数组大小
procedure heapsort(data:datalist;n:longint);
var i,p:longint;
begin
for i:=n div 2 downto 1 do
sift(data,i,n);
for i:=n downto 2 do
begin
p:=data[1];
data[1]:=data[i];
data[i]:=p;
sift(data,1,i-1);
end;
end;