0x01 原理
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:
- 大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;
- 小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;
0x02 时间复杂度
堆排序的平均时间复杂度为 Ο(nlogn)。
0x03 例子
图片来源于菜鸟教程
0x04 实现思路
- 建立一个调整函数,该函数用于从指定节点开始检测是否大于该节点的子节点
- 大于,则结束函数
- 小于,则该节点与子节点交换,且以子节点为新节点继续检测
- 建立堆排序函数, 建立一个循环,从最后一个非叶子节点开始,调用调整函数,对整个堆进行调整。调整后的堆:第一个元素最大,堆中父节点一定大于子节点
- 在排序函数中再建立一个循环,循环中将头尾节点交换,并再次调用调整函数(以头节点为开始)。