堆排序
2013-09-25 18:01
357 查看
//以下从一个任意 的数组出发构建最大堆 ,然后进行堆排序 void swap(int *a,int *b)//交换值 { int tem=0; tem=*a; *a=*b; *b=tem; } void Max(int A[20],int i,int len)//保证最大堆的性质 { int l,r,largest; l=2*i+1; r=2*(i+1); if(l<len&&A[l]>A[i]) largest=l; else largest=i; if(r<len&&A[r]>A[largest]) largest=r; if(largest!=i) {swap(&A[i],&A[largest]); Max(A,largest,len); } } void Build(int A[],int len)//建堆 { int i=0; for(i=len/2-1;i>=0;i--) Max(A,i,len); } void Heapsort(int A[],int len)//堆排序 { Build(A,len); for(int i=len-1;i>=1;i--) { swap(&A[i],&A[0]); len--; //最后的位置已经排好,只需要排序前面位置了 Max(A,0,len); } } int main() { int A[100]; int n=0; cout<<"input the length of the array:"<<endl; cin>>n; for(int i=0;i<n;i++) cin>>A[i]; Heapsort(A,n); for(int i=0;i<n;i++) cout<<A[i]<<"\t"; return 0; }