上升和下降的Heapsort

kri*_*ray 1 sorting heapsort

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

Jak*_*ube 6

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

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

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

您可以在下图中看到该算法的工作原理:(由Gms创建)

堆排序示例

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

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