heapify算法主要是把一个数组按堆的顺序排好,可以实现一定的优先级,下面是对数组堆化参考:
//下移操作:
void AdjustDown(MH* mh, int k){
while (k * 2 <= mh->count)
{
int j = k * 2;
if (j + 1 <= mh->count && mh->data[j] < mh->data[j + 1])//如果右孩子存在且右孩子比左孩子大
{
j = j + 1;
}
if (mh->data[k] > mh->data[j])//如果节点比孩子大
{
break;
}
//否则交换k和j
int tmp = mh->data[k];
mh->data[k] = mh->data[j];
mh->data[j] = tmp;
k = j;
}
}
//heapify算法,把数组转化为堆
void initMaxHeap2(MH* mh, int size, HeapDataType* arr){
mh->MaxSize = size;
mh->data = (HeapDataType*)malloc((mh->MaxSize + 1) * sizeof(HeapDataType));//从1开始存储
//吧arr数组的值赋给这个堆
for (int i = 0; i < size; i++)
{
mh->data[i + 1] = arr[i];
}
mh->count = size;
//整合堆操作
for (int i = mh->count / 2; i > 0; i--)
{
AdjustDown(mh, i);
}
}