来自Cormen的max heapify算法,具有零索引

时间:2011-06-22 18:16:55

标签: c algorithm heap heapsort

我正在尝试实现算法手册here中给出的最大堆化算法 书中的算法是

 MAX-HEAPIFY(A,i)
1   l<-LEFT(i)
2   r<-RIGHT(i)
3  if l<=heap-size[A] and A[l]>A[i]
4    then largest<--l
5    else largest<--i
6 if r<=heap-size[A] and A[r]>A[largest]
7    then largest <->r
8 if largest!=i
9    then exchange A[i]<->A[largest]
10        MAX-HEAPIFY(A,largest)

我的问题是我的数组从Zero开始。在书中他们假设如果父母的索引是i,那么左子是2i而右子是2i + 1但是当他们的索引从1开始时。 case它是零所以我应该如何计算左右孩子的索引?

1 个答案:

答案 0 :(得分:5)

左边的孩子是2i + 1,右边的孩子是2(i + 1)= 2i + 2.

你可以通过调用你的一个索引j来证明这是正确的,定义i = j - 1并观察

j = i + 1
left + 1  = 2j = 2(i+1) = 2i+2
right + 1 = 2j+1 = 2(i+1) + 1

所以

left = 2i+1
right = 2(i+1)

(您还可以通过分配单个元素来省去一些麻烦。)