堆排序

来源:互联网 发布:程序员写代码的软件 编辑:程序博客网 时间:2024/06/16 03:07

堆排序是排序中的一种,十分有效,而且不像快排一样容易被坑,因此让一些神犇十分热爱。

堆排序十分有效,速度也极其迅速,确实值得学习。

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>int a[1001],len;void insert(int x){a[++len]=x;int k=len,t;while(k>1 && a[k]<a[k/2]){t=a[k];a[k]=a[k/2];a[k/2]=t;k/=2;}}int main(){int n,m,j,k,i,t;scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d",&k);insert(k);}for(i=1;i<=n;i++){printf("%d ",a[1]);a[1]=a[len--];k=1;while((a[k]>a[2*k] && 2*k<=len) || (a[k]>a[2*k+1] && 2*k+1<=len)){m=2*k;if(a[m]>a[m+1] && m+1<=len)    m++;t=a[k];a[k]=a[m];a[m]=t;k=m;}for(j=1;j<=len;j++)printf("%d ",a[j]);puts("");}return 0;}


 

2 1
原创粉丝点击