这是算法导论上的例题
可以参考以下伪代码
c++代码
#include
using namespace std;
//交换两数大小
void exchange(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
//左孩子,右孩子
int left(int i)
{
return i*2;
}
int right(int i)
{
return i*2+1;
}
//维护最大堆的函数
void maxHeapify(int array[], int len, int i)
{
int l=left(i),r=right(i);
int largest =i;
if(l
array[largest]) largest=l; if(r
array[largest]) largest=r; if(largest!= i) { exchange(array[largest],array[i]); maxHeapify(array,len,largest); // 递归调整 } } //排序 void heapSort(int array[],int size) { for(int i=size/2-1;i>=0;--i) { maxHeapify(array,size,i); } for(int i=size-1;i>=1;--i) { exchange(array[0], array[i]); maxHeapify(array,i,0); } } int main() { int Array[10] = {16,4,10,14,7,9,3,2,8,1}; cout<<"原始堆为:"<
运行结果