我读过并被告知 Heapsort 只能应用于最大堆,但是这篇文章 here另有说明。
那么,HeapSort 是不是也可以应用在最小堆上呢?
最佳答案
是的,有备注。
Heapsort 的工作原理是首先创建一个堆(可以是最小堆或最大堆),然后重复提取堆的根,将其放入目标数组,并恢复减少的堆。
通常,这是就地执行的,因此目标数组与源数组重合,并且在有空间的地方复制根。堆不会移动,它会通过每次丢掉最后一片叶子而缩小。
使用通常的索引方案,我们对数组进行以下分区:
Root | Heap | Sorted
对于最大堆,在排序结束时,元素将按升序存储,对于最小堆,将按降序存储。
如果想倒序,可以排序后翻转整个数组,也可以改变索引方案实现分区
Sorted | Heap | Root
不确定这两种方法中哪一种最快。
关于algorithm - Heapsort可以应用于最小堆数据结构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50942561/