标签:
对于一个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