前面我们学习了小顶堆,相信大家都已经有点概念了,今天来了解一下大顶堆。
大顶堆示意图
堆数组存放的公式
我们用简单的公式来描述一下堆的定义就是:
大顶堆: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