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循環不需要迭代器是可變的?