#include <stdio.h>
#define maxn 100000
int heap[maxn];
void shiftdown(int i, int n)
{
int k, t;
t=heap[i]; k=i<<1;
while(k<=n)
{
if(k<n&&heap[k]>heap[k+1])k++;
if(t>heap[k]){heap[i]=heap[k];i=k;k=i<<1;}
else break;
}
heap[i]=t;
}
int main()
{
int n;
scanf("%d", &n);
for(int i=1; i<=n; i++) scanf("%d", &heap[i]);
for(int i=n>>1; i; i--) shiftdown(i, n);
while(n)
{
printf("%d ", heap[1]);
heap[1]=heap[n--];
shiftdown(1, n);
}
}
堆排序
最新推荐文章于 2018-03-26 22:34:21 发布