堆是什么?
堆是一种基本的数据结构,它是一棵完全二叉树,其中每个节点的值都大于等于(或小于等于)其左右子节点的值。堆可以用来实现优先队列、排序算法等。
堆的基本操作
堆的基本操作有两个:插入和删除。插入操作将一个元素添加到堆中,而删除操作则从堆中删除一个元素。
插入操作
插入操作通常会在堆的末尾添加一个元素,然后将其与父节点比较,如果比父节点大(或小),则交换它们的位置,直到满足堆的性质。
void insert(int x) {
heap[++n] = x;
int i = n;
while (i > 1 && heap[i] > heap[i / 2]) {
swap(heap[i], heap[i / 2]);
i /= 2;
}
}
删除操作
删除操作通常会删除堆的根节点,然后将堆的最后一个元素放到根节点上,并将其与子节点比较,如果比其中一个子节点小(或大),则与其交换位置,直到满足堆的性质。

int remove() {
int x = heap[1];
heap[1] = heap[n--];
int i = 1;
while (i * 2
烽烟博客