Description
输入n(<=100000),由小到大输出
Input
n
n个数
Output
由小到大输出
Sample Input
5
3 2 1 4 5
Sample Output
1 2 3 4 5
解题思路:先读入数据,每读入一个数,就对堆进行排序,然后输出即可。
程序:
const
maxn=100000;
var
a:array[0..maxn]of longint;
n,i:longint;
procedure change(i,j:longint);
var
c:longint;
begin
c:=a[i];
a[i]:=a[j];
a[j]:=c;
end;
procedure up(i:longint);
var
tip:longint;
begin
if i=1 then exit;
tip:=i div 2;
if a[tip]>a[i] then begin change(i,tip); up(tip); end;
end;
procedure down(i:longint);
var
tip:longint;
begin
if i*2>n then exit;
tip:=i*2;
if (tip+1<=n) and (a[tip]>a[tip+1]) then inc(tip);
if a[i]>a[tip] then begin change(i,tip); down(tip); end;
end;
begin
readln(n);
for i:=1 to n do
begin
read(a[i]);
up(i);
end;
for i:=1 to n do
begin
write(a[1],' ');
change(1,n);
dec(n);
down(1);
end;
end.
版权属于:Chris
原文地址:http://blog.sina.com.cn/s/blog_83ac6af80102v0nt.html
转载时必须以链接形式注明原始出处及本声明。