可以在最小堆数据结构上应用堆排序吗?

时间:2018-06-20 07:26:16

标签: algorithm sorting data-structures heap

我已阅读并得知Heapsort只能应用于Max堆,但本文Wikipedia-C++20另有说明。

那么,HeapSort是否也可以应用于Min堆是真的吗?

1 个答案:

答案 0 :(得分:3)

是的,有句话。

Heapsort的工作方式是先创建一个堆(可以是最小或最大),然后重复提取堆的根,将其放入目标数组中,然后还原缩小的堆。

通常,这是就地执行的,因此目标数组与源数组重合,并且将根复制到有空间的地方。堆不动,每次都通过丢下最后一片叶子来缩小。

使用通常的索引方案,我们可以对数组进行以下分区:

Root | Heap | Sorted

对于Max堆,排序结束时,元素将以升序存储,而对于Min堆,元素将以降序存储。

如果需要相反的顺序,则可以在排序后翻转整个数组,或者更改索引方案以实现分区

Sorted | Heap | Root

不确定两种方法中哪一种最快。