Algorithm 构建堆过程。
大小为n的整数数组可以通过调整从节点开始的完整二叉树的每个内部节点上的堆来转换为堆⌊(n)−1)/2⌋ 然后按顺序调整根节点(根节点位于索引0处)⌊(n)−1)/2, ⌊(n)−3)/2⌋, ....., 0 ==========================================================================Algorithm 构建堆过程。,algorithm,data-structures,heap,Algorithm,Data Structures,Heap,大小为n的整数数组可以通过调整从节点开始的完整二叉树的每个内部节点上的堆来转换为堆⌊(n)−1)/2⌋ 然后按顺序调整根节点(根节点位于索引0处)⌊(n)−1)/2, ⌊(n)−3)/2⌋, ....., 0 ========================================================================== 我知道,这是一个构建堆的过程,需要O(n)个时间,但是有人能让我通过取一个小值n的数组来显示事情是如何工作的吗?让我们用数组做一个例子[7,
我知道,这是一个构建堆的过程,需要O(n)个时间,但是有人能让我通过取一个小值n的数组来显示事情是如何工作的吗?让我们用数组做一个例子
[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
0
1 4
5 2 9 8
7 6 3
最后,7大于0,所以我们交换它,将0放在根上。7也比它的两个孩子大,所以我们用1来交换它。7比5和6大,所以我们把它换成叶子级别。结果是:
7
0 4
1 2 9 8
5 6 3
0
1 4
5 2 9 8
7 6 3
哪一个是有效的最小堆。是什么阻止了您将15个随机值绘制为金字塔并按所需顺序交换它们?如果您搜索“构建堆示例”,则有很多示例。这里有一个视频:非常感谢,好心的先生!:)