排序I
Time Limit:1000MS Memory Limit:65536K
Total Submit:718 Accepted:300
Description
输入n(<=100000),由小到大输出
Input
n
n个数
Output
由小到大输出
Sample Input
5
3 2 1 4 5
Sample Output
1 2 3 4 5
一个(二叉)堆是一个几乎完全二叉树,它的每个节点都有满足堆的每个特性:如果v和p(v)分别是它的节点和父节点,
那么存储在p(v)中的数据项中的键值不小于(或不大于)存储在v中的数据项的键值。维护堆的性质。
const maxn=100000; var a:array[0..maxn] of longint; i,j,n:longint; procedure heap(nn,ii:longint); var x,i,j:longint; begin i:=ii; x:=a[ii]; j:=2*ii; while j<=nn do begin if (j<nn) and (a[j]<a[j+1]) then inc(j); if x<a[j] then begin a[i]:=a[j]; i:=j; j:=2*i; end else j:=nn+1; end; a[i]:=x; end; begin readln(n); for i:=1 to n do read(a[i]); for i:=n div 2 downto 1 do heap(n,i); for i:=n downto 2 do begin a[0]:=a[1];a[1]:=a[i];a[i]:=a[0]; heap(i-1,1); end; for i:=1 to n do write(a[i],' '); end.