我在研究算法,特别是heapsort根据我的理解,heapsort算法需要先将列表变成一个最大堆来准备列表。
转动我的
[2,8,5,3,9,1]
进入
[9,8,5,3,2,1]
有了希普索尔特,我应该把9换成1。但是通过查看max heap之后的数组,我看到了一个按降序排列的列表。当列表已按降序排序时,为什么需要交换?
这只是我看过之后的想法:
https://www.youtube.com/watch?v=2DmK_H7IdTo

最佳答案

把它堆成一堆后,不一定按降序排序。
堆只要求每个节点都比其子节点大(或小,对于最小堆而言),但不说明子节点的顺序,也不说明不同级别的节点之间的关系(如果一个节点不是另一个节点的直接后代,请参阅下面的56)。这意味着这也是一个有效的堆:

     9
   /   \
  5     8
 / \   /
1   2 6

[9, 5, 8, 1, 2, 6]

10-05 17:58