堆排序
1 堆的定义
堆是具有下列性质的完全二叉树:每个节点的值都大于或等于其左右孩子节点的值,称为大顶堆;或者每个节点的值都小于或等于其左右孩子节点的值,称为小顶堆。
假定堆顶(即二叉树的根节点)的编号为 0,按照层序遍历的方式给堆的每个节点进行编号,第 i 个节点的左右孩子节点(如果有的话)的编号分别是 2 * i + 1 和 2 * i + 2;同样,第 i 个节点的父节点(如果有的话)的编号是 (i - 1) / 2。
2 堆的存储结构
以大顶堆为例,介绍堆的两种存储方式。
2.1 数组
int* heap = new int[N];