建立堆程序。

时间:2018-06-20 11:23:37

标签: algorithm data-structures heap

大小为n的整数数组可以通过调整从完整的二叉树的每个内部节点处生根的堆(从节点⌊(n-1)/2⌋开始)并进行此调整直至转换为堆来转换为堆。根节点(根节点在索引0处)的顺序为⌊(n-1)/ 2,⌊(n-3)/2⌋,.....,0。

================================================ =========================

我知道,这是一个构建堆过程,需要O(n)时间,但是有人可以通过取一个n较小的数组来显示事物的工作情况来使我形象化吗?

1 个答案:

答案 0 :(得分:2)

让我们以数组[7, 3, 9, 1, 2, 4, 8, 5, 6, 0]为例。树的结构是:

         7
    3         9
  1   2     4   8
 5 6 0

堆中有10个项目。因此,从索引(n / 2)-1(第一个非叶子节点)开始,我们看到值2大于其一个子节点。我们交换,给予:

         7
    3         9
  1   0     4   8
 5 6 2

接下来,1小于其子级,因此我们不理会它。

9大于两个孩子。规则是您将其交换为最小的子项,得到:

         7
     3       4
   1   0   9   8
  5 6 2

3大于两个子项,因此将其交换为0。它也大于2,因此我们进行另一个交换。结果是:

         7
     0       4
   1   2   9   8
  5 6 3

最后,7大于0,所以我们交换它,将0放在根。 7也大于其两个子级,因此我们将其交换为1。7大于5和6,因此将其交换为叶级。结果是:

         0
     1       4
   5   2   9   8
  7 6 3

这是有效的最小堆。