通过Insertion实现Build Heap函数

时间:2013-09-27 18:29:03

标签: java algorithm heap implementation

请告诉我这两个用于构建堆的伪代码是否总是返回SAME HEAP? 这是“经典”着名的BuildHeap代码:

BuildHeap(A) // A是未排序的数组

for(i = A.size/2 down to 1) do 
    MaxHeapify(A,i) 

这是使用插入代码构建堆:

构建 - 最大值 - 堆-BY-插入(A)

heapsize[A] = 1
for i=2 to length[A]
    Max-Heap-Insert(A,A[i])

谢谢!

1 个答案:

答案 0 :(得分:0)

看起来好像是指从头开始构建堆的线性时间方法,并将其与迭代构建堆进行比较,一次接受一个项,每次插入后堆不变为true。这两个 - 假设你得到了正确的所有细节 - 将通过构建堆积的东西来完成。

在第一种情况下,请注意,如果数组已满足堆不变量,则不会更改它。这意味着不会更改任何方式来安排相当于有效堆的对象。由于可能存在多个这样的安排 - 特别是如果有相同比较的密钥 - 不能保证您最终的特定安排将匹配从相同项目创建有效堆的任何其他方式。