堆排序算法
2013-07-28 17:06
134 查看
堆排序算法时间复杂度为O(nlogn)
#include<stdio.h> void Shaixuan(int *a,int s,int m){ //默认a[s+1....m]符合大顶堆,将a[s]通过筛选重新形成大顶堆 int rc,j; rc=a[s]; for(j=2*s;j<=m;j*=2) { if(j<m&&a[j]<a[j+1])j++; if(a[s]>=a[j])break; a[s]=a[j]; s=j;//跟踪当前待插入位置 }//for a[s]=rc; } void Duipai(int *a,int n){ int i,t; for(i=n/2;i>0;i--) { Shaixuan(a,i,n); }//建立大顶堆 for(i=n;i>1;i--) { t=a[1]; a[1]=a[i]; a[i]=t; Shaixuan(a,1,i-1); }//堆顶元素就位 }//Duipai int main() { int n,i; int a[100]; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&a[i]); } Duipai(a,n); for(i=1;i<=n;i++) { printf("%d ",a[i]); } system("pause"); return 0; }