- 排序算法
- 不稳定排序
- $math_inline$O(n\log(n))$math_inline$
堆
堆是具有以下性质的完全二叉树:
根结点标号为 0
,则对于根 i
的左子为 2i+1
右子为 2i+2
- **大顶堆:**每个结点的值都大于或等于其左右子结点的值
arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2]
- **小顶堆:**每个结点的值都小于或等于其左右子结点的值
arr[i] <= arr[2i+1] && arr[i] <= arr[2i+2]
基本思想步骤
一般升序采用大顶堆,降序采用小顶堆
- 将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点
- 将根结点与末尾元素进行交换,此时末尾就为最大值
- 然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值