我已阅读并得知Heapsort只能应用于Max堆,但本文Wikipedia-C++20另有说明。
那么,HeapSort是否也可以应用于Min堆是真的吗?
答案 0 :(得分:3)
是的,有句话。
Heapsort的工作方式是先创建一个堆(可以是最小或最大),然后重复提取堆的根,将其放入目标数组中,然后还原缩小的堆。
通常,这是就地执行的,因此目标数组与源数组重合,并且将根复制到有空间的地方。堆不动,每次都通过丢下最后一片叶子来缩小。
使用通常的索引方案,我们可以对数组进行以下分区:
Root | Heap | Sorted
对于Max堆,排序结束时,元素将以升序存储,而对于Min堆,元素将以降序存储。
如果需要相反的顺序,则可以在排序后翻转整个数组,或者更改索引方案以实现分区
Sorted | Heap | Root
不确定两种方法中哪一种最快。