1. 堆的概念
堆在逻辑上是一棵完全二叉树,物理上是保存在数组中的。满足任意节点的值都大于其子树中节点的值,叫做大根堆,任意节点的值都小于其子树中节点的值叫做小根堆。堆的基本作用是快速找集合中的最值。
2. 最大堆的实现
2.1 向堆中添加元素(进行上浮操作 siftUp)
数组尾插添加元素,添加元素后,可能会破坏最大堆的定义,因此进行元素上浮操作 siftUp,需要调整前,左右子树已经是一个堆,才能调整。然后进行 siftUp 操作直到把当前元素上浮到合适位置。

public void add(int val) {
// 1. 向数组末尾添加元素
data.add(val);
// 2. 调整当前堆的结构,使其仍然满足最大堆的性质
siftUp(data.size() - 1);
}
// 元素上浮操作
private void siftUp(int i) {
while(i > 0 &&
本文介绍了堆的概念,包括大根堆和小根堆,并详细讲述了最大堆的实现,包括添加元素的上浮操作、取出最大值的下沉操作以及如何建堆。最后,讨论了优先级队列的实现,通常利用堆来高效处理高优先级的对象。

最低0.47元/天 解锁文章
2630

被折叠的 条评论
为什么被折叠?



