我已閱讀算法以刪除堆的根元素。 1.將根元素與堆的最後一個元素交換。 2.然後從根元素向下堆取(向下移位)。從最小或最大堆中刪除根元素的算法
在其他地方,我發現它們從最後一個元素的父元素向上堆積到根(即,檢查deleteTop()函數http://www.geeksforgeeks.org/archives/14873)因此,與正確的方法相混淆:-(這是否因情況而異或文章本身就是錯誤的?
我已閱讀算法以刪除堆的根元素。 1.將根元素與堆的最後一個元素交換。 2.然後從根元素向下堆取(向下移位)。從最小或最大堆中刪除根元素的算法
在其他地方,我發現它們從最後一個元素的父元素向上堆積到根(即,檢查deleteTop()函數http://www.geeksforgeeks.org/archives/14873)因此,與正確的方法相混淆:-(這是否因情況而異或文章本身就是錯誤的?
deleteTop()
的代碼是錯誤的。
當給這個最大堆運行deleteTop()
:
10
8 7
5 4 3 2
||
||
\/
2
8 7
5 4 3 10
||
||
\/
7
8 2
5 4 3 10
產生的堆是自2 <(3-10)
我相信堆排序的概念很簡單,就是找出最大或最小的元素,並從堆刪除它......你可以做到這一點無論哪種方式,所以它的不同的實現算法。
在其他幾個地方,我發現它們從最後的 elem向上堆積。ENT對待根父(即,查看這裏deleteTop()函數 http://www.geeksforgeeks.org/archives/14873)
爲heapify()
說清楚的實施被改編爲中間流問題的在線評論;然而,在通用的堆結構實現中,heapify()
冒泡。有關堆實現和中值流問題的詳細說明,請參見this算法講座。
這有什麼內在的錯誤heapifying錯誤的(就是一個字? )在不同的方向? – 2012-08-09 16:46:54