升序和降序堆排序

Ascending and Descending Heapsort

升序和降序分别建在哪个堆上。 请解释是否可以使用任何堆(最大或最小)进行任何排序(升序或降序)。

通常您会使用最大堆进行升序排序,使用最小堆进行降序排序。

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

  1. 用原始数据构建最大堆
  2. 现在最大的元素在树的根部,将这个元素与树的最后一个元素交换。
  3. 查看新树,您忽略了最后一个位置(已经排序)。新树可能不再是最大堆,因此我们通过向下筛选根将其转换为最大堆。
  4. 转到步骤 2 并重复直到树为空。

您可以在下图中看到正在运行的算法:(由 Gms 创建)

如您所见,我们在每个步骤中都将最大值(首先是最大的数字,然后是第二大的数字,...)放在数组的末尾,它们最终按升序排序。

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