2012-08-09 85 views
1

我已閱讀算法以刪除堆的根元素。 1.將根元素與堆的最後一個元素交換。 2.然後從根元素向下堆取(向下移位)。從最小或最大堆中刪除根元素的算法

在其他地方,我發現它們從最後一個元素的父元素向上堆積到根(即,檢查deleteTop()函數http://www.geeksforgeeks.org/archives/14873)因此,與正確的方法相混淆:-(這是否因情況而異或文章本身就是錯誤的?

+0

這有什麼內在的錯誤heapifying錯誤的(就是一個字? )在不同的方向? – 2012-08-09 16:46:54

回答

1

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)

0

我相信堆排序的概念很簡單,就是找出最大或最小的元素,並從堆刪除它......你可以做到這一點無論哪種方式,所以它的不同的實現算法。

0

在其他幾個地方,我發現它們從最後的 elem向上堆積。ENT對待根父(即,查看這裏deleteTop()函數 http://www.geeksforgeeks.org/archives/14873

heapify()說清楚的實施被改編爲中間流問題的在線評論;然而,在通用的堆結構實現中,heapify()冒泡。有關堆實現和中值流問題的詳細說明,請參見this算法講座。