1
A
回答
2
当你创建最大/最小堆,你不需要heapify(PercolateDown)的叶子,因为他们不可能有哪个是大/小那么他们的父母的子女。
0
请注意,在教科书C++源代码使用基于1的索引,即 array[0]
不使用,array[n]
应该是有效的参考成阵列数据。
这就是而不是符合C++标准约定(数组,矢量等与零基索引0 ... n-1)。
为了说明(1型)索引号(不是值)堆内:
1
2 3
4 5 6 7
8 9 10
如果你读通过仔细你的链接中的文字,你会看到,在位置每一父节点i
只有在这些位置不超过数组长度的情况下,堆中才有儿童2*i
和2*i+1
。
由于PercolateDown()算法将父母与子女交换,因此只需要length/2
迭代。
此外,堆是从下到上构建的。因此,迭代开始于n/2
上升,即朝向位置1
。
相关问题
- 1. 为什么我的for循环在一次迭代后停止?
- 2. 为什么我的循环只迭代两次?
- 3. 为什么循环迭代超出Integer.MAX_VALUE?
- 4. 为什么这个while循环省略了第一次迭代?
- 5. 为什么这个循环再做一次迭代?
- 6. 循环迭代函数x次循环
- 7. 为什么我的循环只能用循环中的警报正确迭代?
- 8. ()循环迭代多少次?
- 9. 循环第一次迭代
- 10. 为什么此循环的第二次迭代会跳过第一次扫描?
- 11. 为什么在第一次迭代后C++ io流的循环会中断?
- 12. 的WinSock2送返回SOCKET_ERROR 6之后循环迭代...为什么?
- 13. 循环和迭代有什么区别?
- 14. 迭代器与循环以及为什么迭代器是作为循环引入的?
- 15. 八度算法循环迭代
- 16. C# - 为什么这个循环的第一次迭代比其余的慢?
- 17. 循环中的PHP迭代
- 18. 迭代循环
- 19. 保存for循环的每次迭代
- 20. 为什么我的for循环在5次迭代后停止? (在hello()函数)
- 21. 为什么我的循环变量在1次迭代后没有活动?
- 22. jQuery每次循环两次,为什么?
- 23. 当迭代MATLAB循环时,它不会迭代到指定的值 - 为什么?
- 24. 循环中的迭代错误是什么?
- 25. 循环调度Java迭代器
- 26. 为什么球拍代码中的for循环速度太慢
- 27. 为什么Spark的第一次迭代速度很慢并且迭代更快?
- 28. 为什么我的内循环迭代少于出循环?很奇怪?
- 29. 迭代foreach循环
- 30. 为什么for循环不需要迭代器是可变的?