标签:
对于一个int数组,请编写一个堆排序算法,对数组元素排序。
给定一个int数组A及数组的大小n,请返回排序后的数组。
[1,2,3,5,2,3],6
[1,2,2,3,3,5]
代码:
class HeapSort { public: void swap(int* A, int i, int j) { int tmp=A[i]; A[i]=A[j]; A[j]=tmp; } void sink(int* A, int k, int n) { while(k*2+1<=n){ //k有子节点 int j=k*2+1; //j表示其子节点 if(j<n && A[j+1]>A[j]) //j指向左右孩子中大的 j++; if(A[k]>A[j]) break; swap(A,k,j); k=j; } } int* heapSort(int* A, int n) { n--; //最后一个元素是A[n-1] for(int parent=(n-1)/2; parent>=0; parent--) //建大顶堆 sink(A,parent,n); while(n>0){ swap(A,0,n--); sink(A,0,n); } return A; } };
标签:
原文地址:http://www.cnblogs.com/claremore/p/5499067.html