我有一個關於堆排序的問題。它在一個算法書中表示A.heap-size<= A.length
我不明白這兩者之間的區別。如果一個數組表示一個堆,爲什麼有可能A.heap-size
小於A.length
。我知道A.heap-size
代表堆中元素的數量,爲什麼它不完全等於數組中的元素數量?A.length和A.heap-size有什麼區別?
12
A
回答
5
堆排序的不變性是n元素數組的前k個元素是k個最小元素上的堆,最後n-k個元素是排序順序中的n-k個最大元素。後面的元素是爲什麼堆不佔據整個陣列。
+6
你能更具體嗎?我無法理解這種差異 – caesar
7
只是爲了擴大答案。進一步閱讀那本書。
A.heap_size
數組,是放置堆(max_heap或min_heap)結構元素的地方。它在排序或排隊的範圍內是有意義的。你是對的:這是堆內元素的數量,但它等於A.length
僅在堆排序的第一次迭代。
在下一迭代中,用A[i] = A[A.length]
(數組A內最後一個元素)交換max_heap樹(A[1]
)的根之後,A[1]
元件將是A的最後元件,並且A.heap_sort
值將由1和max_heap降低結構應爲max_heapified:A[Parent(i)] >= A[i]
,其中Parent(i)
返回堆樹的i/2。
-1
0
則爲a.length給人總的無定的數組,而A.heap大小的元素的元素的無這是在排序次序或堆的屬性後面的元素........和A.length-A.heap的大小,甚至現在甚至還沒有排序,必須在未來排序。
相關問題
- 1. 有什麼區別`和$(Bash中有什麼區別?
- 2. 有什麼區別? :和||
- 3. &&和||有什麼區別?
- 4. 「/」和「/ *」有什麼區別?
- 5. 有什麼區別:。!和:r!?
- 6. ==和===有什麼區別?
- 7. Appender和〜有什麼區別?
- 8. $ @和$ *有什麼區別?
- 9. is和=有什麼區別?
- 10. #.00和#。##有什麼區別?
- 11. `==`和`is`有什麼區別?
- 12. '=='和'==='有什麼區別?
- 13. /和/#/有什麼區別?
- 14. | 0和~~有什麼區別?
- 15. `&`和`ref`有什麼區別?
- 16. ==和===有什麼區別?
- 17. ==和===有什麼區別?
- 18. `{}`和`[]`有什麼區別?
- 19. JavaScript和=== ===有什麼區別?
- 20. difftime和' - '有什麼區別?
- 21. =和==有什麼區別?
- 22. xtype和別名有什麼區別?
- 23. Mixpanel:識別()和people.identify()有什麼區別?
- 24. 有什麼區別
- 25. 有什麼區別
- 26. 有什麼區別?
- 27. 有什麼區別?
- 28. 有什麼區別?
- 29. 有什麼區別
- 30. ....有什麼區別?
聽起來像你的書的堆排序實現使用數組的第一個「節」作爲堆,而數組的第二個「節」用於排序元素。堆由'A.length'元素開始,但是當你移除最大元素時......堆會縮小。 – rliu