建堆过程就是根据数组元素进行最大堆的创建,可以利用堆维护的性质,堆维护见博客。在进行创建时,将数组的最后一半元素视为叶子,对前一半利用堆维护的性质进行建堆。时间复杂度为O(n)代码如下:
void Insert::BuileMaxHeap(int A[],int total)
{
int roots=total/2-1;//建堆时,把数组元素后一半的视为完全二叉树即堆的叶子.
for(;roots>=0;--roots)
{
MaxHeapIFY(A,roots,total);//堆维护函数
}
}
建立最小堆类似。