|
@@ -349,29 +349,35 @@ array此时为[5, 4, 6, 7, 9, 3, 4, 8, 2, 0]
|
|
|
|
|
|
初始值 [5 4 6 7 0 3 4 8 2 9]
|
|
|
|
|
|
+
|
|
|
调用siftDown(array, 4 , 10 )
|
|
|
交换后结果 [5 4 6 7 9 3 4 8 2 0] 继续循环
|
|
|
rootIndex: 9 没有子节点退出循环
|
|
|
|
|
|
+
|
|
|
调用siftDown(array, 3 , 10 )
|
|
|
交换后结果 [5 4 6 8 9 3 4 7 2 0] 继续循环
|
|
|
rootIndex: 7 没有子节点退出循环
|
|
|
|
|
|
+
|
|
|
调用siftDown(array, 2 , 10 )
|
|
|
child兄弟节点更大,选择该兄弟节点childIndex: 6
|
|
|
父节点比子节点大退出循环
|
|
|
|
|
|
+
|
|
|
调用siftDown(array, 1 , 10 )
|
|
|
child兄弟节点更大,选择该兄弟节点childIndex: 4
|
|
|
交换后结果 [5 9 6 8 4 3 4 7 2 0] 继续循环
|
|
|
父节点比子节点大退出循环
|
|
|
|
|
|
+
|
|
|
调用siftDown(array, 0 , 10 )
|
|
|
交换后结果 [9 5 6 8 4 3 4 7 2 0] 继续循环
|
|
|
交换后结果 [9 8 6 5 4 3 4 7 2 0] 继续循环
|
|
|
交换后结果 [9 8 6 7 4 3 4 5 2 0] 继续循环
|
|
|
rootIndex: 7 没有子节点退出循环
|
|
|
最后获取得的 [9 8 6 7 4 3 4 5 2 0] 就是大顶堆,父节点皆比子节点大。
|
|
|
+
|
|
|
排序我就不举例了,都是一个意思。如果还看不懂就把切片换成堆结构你就明白了。
|
|
|
|
|
|
|