堆排序(初学者)

来源:互联网 发布:杭州seo外包服务 编辑:程序博客网 时间:2024/05/17 10:05
/*主要是有指针,指针指示着程序的运行。 */ #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;}

0 0
原创粉丝点击