堆可以高效地维护元素间的偏序关系,并强化对于最大/最小元素相关操作的支持。可以很容易地实现元素的排列,或者实现优先队列这一抽象数据类型。

1. 堆的定义

2.3 堆与偏序关系 - 图1

2. 堆的抽象维护

2.1 堆的修复

2.3 堆与偏序关系 - 图2

2.2 堆的构建

2.3 堆与偏序关系 - 图3 2.3 堆与偏序关系 - 图4

3. 堆的具体实现

堆的数组实现
对于一个大小为 n 的堆,需要一个大小为 n 的数组,核心是确定父子节点的下标之间的运算关系

4. 堆的应用

2.3 堆与偏序关系 - 图5

4.1 堆排序

2.3 堆与偏序关系 - 图6

4.2 优先队列