前面我们学习了小顶堆,相信大家都已经有点概念了,今天来了解一下大顶堆。
大顶堆示意图
堆数组存放的公式
我们用简单的公式来描述一下堆的定义就是:
大顶堆:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2]
小顶堆:arr[i] <= arr[2i+1] && arr[i] <= arr[2i+2]
下面就来看看大顶堆的C语言实现:
#include<stdio.h>
#include<stdlib.h> //交换数组中两个元素
void swap(int* arr, int i, int m)
{int temp = arr[i];arr[i] = arr[m];arr[m] = temp;
}void heapify(int* a, int k, int index)
{int min = index;while (1) {if (index * 2 + 1 < k &a