我已阅读算法以删除堆的根元素。 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