排序算法整合
排序综合
堆排序
什么是堆?分为两类
- 大根堆
顾名思义,满足完全二叉树,且父母节点永远比子节点要大 - 小根堆
和上面的区别只在父母节点永远比子节点要小
首先需要解决两个问题
- 如何给一个无序变成有序?
- 如何将堆顶元素排出之后还是一个堆?
这里我们先解决第二个问题,第二个解决之后第一个问题将迎刃而解如何解?
A2:将堆顶元素弹出之后,将最大的元素(最后一个)置于堆顶,然后依次递归变成叶子节点
A1:(叶子节点就是堆)(方法是反复筛选)从最后找,找到第一个不是叶子的节点(n/2),然后依次从n/2—->到 1 依次调整即可,注意从上向下的必须调整到叶子才行
补充一个小知识点:在完全二叉树中,一个节点序号为n,那么他的父母节点一定是n/2,即可以推出最后一个非叶子节点就是n/2
堆排序算法性能分析: - 时间复杂度优势:稳定 一直都是O(nlog2(n))
- 空间复杂度:不需要额外空间O(1)
评论