Data structures 堆排序,要使用的最小堆还是最大堆?

Data structures 堆排序,要使用的最小堆还是最大堆?,data-structures,heap,heapsort,Data Structures,Heap,Heapsort,对于堆排序,如果我们想按升序对数组进行排序,那么应该将堆转换为最大堆还是最小堆?这两种方法都可以。通常,您会使用最大堆排序,以便最大的元素位于数组的最左侧。这样,当您退出队列并从堆中移除元素以将它们放置在最终位置时,您可以将它们从右向左(按降序)放置在阵列的远端,而无需踩到其他堆元素的顶部 原则上,您也可以使用最右边的最小元素构建一个最小堆,然后将小元素出列并将它们移动到最左边,尽管我以前从未见过这样做。我还见过使用最小堆的代码,在后面出列,然后对数组进行O(n)反转,即后期处理。我从来都不明白

对于堆排序,如果我们想按升序对数组进行排序,那么应该将堆转换为最大堆还是最小堆?

这两种方法都可以。通常,您会使用最大堆排序,以便最大的元素位于数组的最左侧。这样,当您退出队列并从堆中移除元素以将它们放置在最终位置时,您可以将它们从右向左(按降序)放置在阵列的远端,而无需踩到其他堆元素的顶部


原则上,您也可以使用最右边的最小元素构建一个最小堆,然后将小元素出列并将它们移动到最左边,尽管我以前从未见过这样做。

我还见过使用最小堆的代码,在后面出列,然后对数组进行O(n)反转,即后期处理。我从来都不明白程序员为什么那样写。一般来说,我见过使用max heap。哦,我看到了“后面的最小堆”方法。同样,我不知道他为什么那样做。非常感谢@templatetypedef和@jim mischel!