堆排序(Heapsort)
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:
-
大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;
-
小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;
算法描述
- 创建一个堆 H[0……n-1];
- 把堆首(最大值)和堆尾互换;
- 把堆的尺寸缩小 1,并调用 shift_down(0),目的是把新的数组顶端数据调整到相应位置;
- 重复步骤 2,直到堆的尺寸为 1。
例子
数组: 4 6 8 5 9
第一次: 4 6 8 5 9 ===>>> 4 9 8 5 6
第二次: 4 9 8 5 6 ===>>> 9 4 8 5 6
第三次: 9 4 8 5 6 ===>>> 9 6 8 5 4
第四次: 9 6 8 5 4 ===>>> 4 6 8 5 9
第五次: 4 6 8 5 9 ===>>> 8 6 4 5 9
第六次: 8 6 4 5 9 ===>>> 5 6 4 8 9
第七次: 5 6 4 8 9 ===>>> 6 5 4 8 9
第八次: 6 5 4 8 9 ===>>> 4 5 6 8 9
最终 4 5 6 8 9
结束
复制代码
算法复杂度
空间复杂度:
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持一下吧
相关推荐