1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<time.h> 4 #include<algorithm> 5 6 using namespace std; 7 const int N=15; 8 void change(int a[],int f,int t) 9 { 10 int tmp=a[f]; 11 int i=f; 12 int j=i*2; 13 bool isfinish=0; 14 while(j<=t && !isfinish) 15 { 16 if(j<t && a[j]<a[j+1]) //j<t 17 j+=1; 18 if(tmp>=a[j]) 19 isfinish=true; 20 else 21 { 22 a[i]=a[j]; 23 i=j; 24 j=j*2; 25 } 26 } 27 a[i]=tmp; 28 } 29 30 void crh(int a[] ,int n) 31 { 32 for(int i=n/2 ; i>=1 ; --i) 33 change(a,i,n); 34 } 35 36 void hs(int a[],int len) 37 { 38 int n,i; 39 crh(a,len); 40 n=len; 41 for(int i=n ; i>=2 ; --i) 42 { 43 int tmp=a[1]; 44 a[1]=a[i]; 45 a[i]=tmp; 46 change(a,1,i-1); 47 } 48 } 49 int main() 50 { 51 int a[N+1]; //【warning】这里必须N+1,下标从1开始,0没用到,只1到14可以用,没有15个数字,会非法越界 52 for(int i=1 ; i<=N ; ++i) 53 a[i]=rand()%100; 54 printf("init arr:"); 55 for(int i=1 ; i<=N ; ++i) 56 printf("%d ",a[i]); 57 printf("\n"); 58 hs(a,N); 59 printf("sorted arr:"); 60 for(int i=1 ; i<=N ; ++i) 61 printf("%d ",a[i]); 62 printf("\n\n"); 63 system("pause"); 64 return 0; 65 }
原文:http://www.cnblogs.com/Evence/p/4475004.html