堆排序
堆排是基于堆的一种排序算法,对于堆的了解请点开链接:https://blog.youkuaiyun.com/z_x_m_m_q/article/details/82320357(创建、插入、删除)
算法思想:
之前的博客写了小堆,由于降序排列是根据小堆性质进行排列的,顺着前面的知识这里我们讨论从大到小的排列
首先小堆建好之后堆顶数据是堆中最小的数据,将堆顶元素与最后的一个元素交换位置,这样最后元素就出在有序区间了。再对除有序区间外的其他数据从堆顶开始来一次向下调整,这样堆顶数据又是堆中最小的数据,重复上述步骤直至堆中只剩下一个元素。
以具有N个数据的数组 a[N] 为例,说下对排序的步骤:
- 利用数组中元素建立节点量为 N 的小堆
- 第一次将a[0] 与 a[N-1]交换位置,对a[0]至a[N-2]进行一次向下调整,重新恢复成小堆(此时堆的节点量为N-1)
- 第二次将a[0] 与 a[N-2]交换位置,对a[0] 至 a[N-3]进行一次向下调整,重新恢复成小堆(此时堆的节点量变为n-2)
- 重复这样的操作,直至 a[0] 与 a[1]交换
图形分析:


本文介绍了堆排序这种基于堆的排序算法。首先讲解了堆排序的原理,通过与最后一个元素交换并调整堆来实现降序排列。接着,详细阐述了堆排序的步骤,包括建堆、交换和调整,以及如何通过图形分析理解排序过程。最后,分析了堆排序的时间复杂度为O(nlgn),空间复杂度为O(1),并指出该算法不稳定。
最低0.47元/天 解锁文章
896

被折叠的 条评论
为什么被折叠?



