选择排序之堆排序(Heap Sort)
本文最后更新于:3 个月前
本文主要总结了堆排序相关知识,其中包括堆排序的概念、算法思想、特点和完整实现代码。
堆排序
堆
- 顺序存储地 “ 完全二叉树 ”
- 结点
i
地左孩子是2i
;右孩子是2i+1
;父结点是i/2
- 结点
- 大根堆(根>=左、右);小根堆(根<=左、右);
算法思想
- 建堆
- 编号<= n/2 的所有结点依次 “ 下坠 ”调整(自底向上处理各分支结点)
- 调整规则:小元素逐层 “ 下坠 ”(与关键字更大的孩子交换)
- 排序
- 将堆顶元素加入有序子序列(堆顶元素与堆底元素交换)
- 堆底元素换到堆顶后,需要进行“ 下坠 ”调整,恢复“ 大根堆 ”的特性
- 上述过程重复 n~1 趟
特性
- 空间复杂度:O(1)
- 时间复杂度:建堆O(n)、排序O(nlogn);总的时间复杂度= O(nlogn)
- 稳定性:不稳定
- 基于大根堆的堆排序得到 “ 递增序列 ”,基于小根堆的堆排序得到 “ 递减序列 ”
完整实现代码
大根堆:按升序排列
1 |
|
小根堆:按降序排列
修改部分:
1 |
|
完整实现:
1 |
|
选择排序之堆排序(Heap Sort)
https://superlovelace.top/2023/09/29/HeapSort/