问题描述
从小到大。
样例输入
5
3 1 2 4 5
样例输出
1 2 3 4 5
算法讨论
堆排序
const
maxn=100000;
type
arr=array[1..maxn] of longint;
var
a:array[1..maxn] of longint;
i,j,n,t:longint;
procedure siftdown(var h:arr;n,i:longint);
var
t:longint;
done:boolean;
begin
if i*2>n
then exit;
done:=false;
repeat
i:=2*i;
if (i+1<=n) and (a[i]<a[i+1])
then i:=i+1;
if h[i div 2]<h[i]
then begin
t:=h[i div 2];
h[i div 2]:=h[i];
h[i]:=t
end
else done:=true
until (i*2>n) or done;
end;
begin
read(n);
for i:=1 to n do
read(a[i]);
for i:=n div 2 downto 1 do
siftdown(a,n,i);
for i:=n downto 2 do
begin
t:=a[1]; a[1]:=a[i]; a[i]:=t;
siftdown(a,i-1,1)
end;
for i:=1 to n do
write(a[i],' ')
end.
Pixiv ID:48087642