var
n,i:longint;
a:array[1..1000] of longint;
procedure buildheap(max,now:longint);
var
j,x:longint;
begin
x:=a[now];
j:=now*2;
while j<=max do
begin
if(ja[j+1])then inc(j);
ifx>a[j] then
begin
a[now]:=a[j];
now:=j;
j:=now*2;
end
elsebreak;
end;
a[now]:=x;
end;
procedure swap(var a,b:longint);
var
t:longint;
begin
t:=a;a:=b;b:=t;
end;
begin
read(n);
for i:=1 to n do
read(a[i]);
for i:=n div 2 downto 1 do
buildheap(n,i);
for i:=n downto 2 do
begin
swap(a[1],a[i]);
buildheap(i-1,1);
end;
for i:=n downto 1 do
write(a[i],' ');
end.
堆排{nlogn}
最新推荐文章于 2021-11-19 03:06:11 发布