- 排序算法
- 不稳定排序
- $_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个元素的次小值
除另有声明外,本博客文章均采用 知识共享 (Creative Commons) 署名 4.0 国际许可协议 进行许可。转载请注明原作者与文章出处。