谁有Pascal语言的堆排序的程序?

来源:百度知道 编辑:UC知道 时间:2024/05/15 19:40:41
数据要随机生成。
有追加悬赏!!!!!!!!
输入到Turbo Pascal能直接运行的,不能有错!!!
大头堆、小头堆都行
有快速排序、归并排序都行
最好有解释(哪种都行)

我写的是根比叶子大的堆,
siftup 是顶堆(就是新来的数据向上,直到它的父亲比自己大,或自己是
堆的根)
程序是对输入数据边读边排的:

program duipai;
var
a:array[1..100000]of longint;
n:longint;

procedure siftup(i:longint);
var
j,b:longint;
begin
b:=a[i];
while i>1 do
begin
j:=i shr 1;
if a[j]<b then
begin
a[i]:=a[j];
i:=j;
end
else break;
end;
a[i]:=b;
end;

procedure init;
begin
assign(input,'a.in'); reset(input);
n:=1;
while not seekeof do
begin
read(a[n]);
siftup(n);
inc(n);
end;
dec(n);
close(input);
end;

procedure ansit;