2012-08-09 81 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算法讲座。