#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);
}
}堆排序
最新推荐文章于 2024-06-09 16:03:45 发布
本文深入探讨了堆排序算法的工作原理,包括如何构建最大堆和最小堆,以及如何使用堆进行排序。通过实例演示,读者可以详细了解堆排序的过程,并掌握其在实际应用中的使用方法。
31万+

被折叠的 条评论
为什么被折叠?



