/*
主要是有指针,指针指示着程序的运行。
*/
#include<stdio.h>
#include<stdlib.h>
int a[10000];
int main(){
int i,j,k,m,n,t,len=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&m);
a[++len]=m;
k=len;
while(k!=1&&a[k]<a[k/2]){
t=a[k];
a[k]=a[k/2];
a[k/2]=t;
k=k/2;
}
}//插入
for(i=1;i<=n;i++){
printf("%d ",a[1]);
a[1]=a[len];
len--;
k=1;
while((2*k<=len&&a[k]>a[2*k])||(2*k+1<=len&&a[k]>a[k*2+1])){//2*k是它崽,2/k是他爸。
j=2*k;
if(a[j]>a[j+1]&&j+1<=len)j++;
t=a[k];
a[k]=a[j];
a[j]=t;
k=j;
}
}//删除
//就在删除的过程中就可以排好序,
//并且是顺序输出。
system("pause");
return 0;
}
堆排序(初学者)
最新推荐文章于 2023-04-14 18:00:17 发布