一,堆的建立
方法:向下调整算法
void Adjust_Down(Data* obj, int size, int parent)//
{
int min_child = parent * 2 + 1;
while (min_child < size)
{
if (min_child + 1 < size && obj[min_child] > obj[min_child + 1])//
{
min_child++;
}
if (obj[min_child] < obj[parent])
{
Swap(&obj[min_child], &obj[parent]);
parent = min_child;
min_child = parent * 2 + 1;
}
else
{
break;
}
}
}
Data为待调整数组类型
二,堆的插入
void push_Heap(HP* obj, Data x)
{
assert(obj);
exp_Heap(obj);
obj->data[obj->size] = x;
obj->size++;
//Adjust_Up(obj->data, obj->size - 1);
Adjust_Down(obj->data, obj->size - 1, 0);
}
注意堆的插入需要从堆尾插入
三,堆的删除
void pop_Heap(HP* obj)
{
assert(obj);
assert(obj->data);
Swap(&obj->data[0], &obj->data[obj->size - 1]);
obj->size--;
Adjust_Down(obj->data, obj->size, 0);
}
注意堆的删除只能删除堆顶数据