- 堆的建立,维护,插入和删除算法
- 堆的插入算法:直接把结点插入到堆末尾,然后从下往上冒泡到合适的位置;
- 堆的删除算法:把最后一个结点插入删除结点的位置,然后进行一次调整.
void max_heap_insert(int **par_array, int item_value)
{
int index = 0;
int father_index = 0;
/*如果超过动态数组大小,则对其内容进行扩充*/
if(heap_size+1 > heap_cap_size)
{
*par_array = (int *)realloc(*par_array, 2*INIT_ARRAY_SIZE*sizeof(int));
}
(*par_array)[heap_size] = item_value;
index = item_value;
heap_size++;
while(index)
{
father_index = (index-1)/2;
if((*par_array)[index] > (*par_array)[father_index])
swap(&((*par_array)[index]), &((*par_array)[father_index]));
index = father_index;
}
}
void heap_delete(int par_array[], int item_value)
{
int i = 0;
for(i = 0; i < heap_size; i++)
{
if(par_array[i] == item_value)
break;
}
par_array[i] = par_array[heap_size-1];
heap_size--;
max_heap_adjust(par_array, i);
}