//将堆分解为由每个父节点所组成的一个个小堆,然后按照删除堆
//的处理方法来处理
//删除操作代码解析在作者博客里
Viod BuildHeap(MaxHeap H)
{
int i;
for(i=H->Size/2;i>0;i--) //从最后一个父节点开始
PercDown(H,i);//参数传入的是整个堆和每个小堆的根节点(父结点)
}
Void PercDown(MaxHeap H,int p) //p为父节点,即每个小堆的根结点
{
int Parent,Child;
ElementType X;
X=H->Data[p];
for(Parent=p; Parent*2<=H->Size; Parent=Child)
{
Child=Parent*2;
if((Child!=H->Size)&&(H->Data[Child]<H->Data[Child+1]))
Child++;
if(X>H->Data[Child])
break;
else
H->Data[Patent]=H->Data[Child];
}
H->Data[Parent]=X;
}
建立最大堆代码解释
最新推荐文章于 2023-05-06 16:36:56 发布