You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
NULL_1/堆排序,.cpp

31 lines
458 B

#include<stdio.h>
int n,num[1000010];
void down(int x)
{
int y=x;
if(x*2<=n&&num[x*2]<num[y]) y=x*2;
if(x*2+1<=n&&num[x*2+1]<num[y]) y=x*2+1;
if(y!=x)
{
int a=num[x];
num[x]=num[y];
num[y]=a;
down(y);
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&num[i]);
for(int i=n/2;i;i--) down(i);
while(n)
{
printf("%d ",num[1]);
num[1]=num[n--];
down(1);
}
return 0;
}