上升和下降的Heapsort

时间:2016-12-18 19:31:26

标签: sorting heapsort

要为升序排序和降序排序构建哪个堆。 请解释是否有任何堆(最大或最小)可用于任何排序(升序或降序)。

1 个答案:

答案 0 :(得分:5)

通常,您将使用max-heap进行升序排序,使用min-heap进行降序排序。

这与通常描述堆排序算法的方式有关:

  1. 使用原始数据构建最大堆
  2. 现在最大元素位于树的根处,在使用树的最后一个元素切换它时使用此元素。
  3. 查看新树,忽略最后一个位置(已经排序)。新树可能不再是最大堆,所以我们通过筛选根目录将其转换为一个。
  4. 转到第2步并重复,直到树为空。
  5. 您可以在下图中看到该算法:(由Gms创建)

    Heap-Sort example

    正如你在每一步中看到的那样,我们在数组的末尾放置了最大值(第一个最大数字,然后是第二个数字......),它们最终被排序。

    但显然你也可以使用max-heap来生成降序排序。只需将找到的最大值放入一个新数组即可。 (或者只是在最后反转排序的数组。)