来源于算法导论第三版
参考伪代码
c++代码
#include <iostream>
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 size,int i)
{
int l=left(i),r=right(i);
int largest=i;
if(l<=size&&array[l]>array[largest])
largest=l;
if(r<=size&&array[r]>array[largest])
largest=r;
if(largest!=i)
{
exchange(array[i],array[largest]);
maxHeapify(array,size,largest);
}
}
int main()
{
int Array[10]={16,4,10,14,7,9,3,2,8,1};
cout<<"原始堆为"<<endl;
for(int i=0;i<10;++i)
cout<<Array[i]<<" ";
maxHeapify(Array,10,1);
cout<<endl<<"经过维护后的最大堆为"<<endl;
for(int i=0;i<10;++i)
cout<<Array[i]<<" ";
return 0;
}
运行结果
本文介绍了一个基于最大堆的数据结构维护算法,并提供了详细的 C++ 实现代码。通过该算法可以有效地维护一个最大堆,确保父节点总是大于其子节点。文章展示了如何通过交换元素的位置来保持堆的性质。

1109

被折叠的 条评论
为什么被折叠?



