这是用于max heapify的程序,我对此算法有疑问,如果在这种情况下MAX_HEAPIFY
仅将largest
传递给此函数i
并直接递归调用MAX_HEAPIFY
将仅在该递归中执行
我假设数组索引从1开始而不是从零开始
MAX_HEAPIFY(A,i,heapsize){
l=2i;
r=2i+1;
if(l<=heapsize&& A[l]>A[i])
largest=l;
else
largest=i;
if(r<=heapsize&&A[r]>A[largest])
largest=r;
if(largest!=i)
swap(A[i],A[largest])
MAX_HEAPIFY(A,largest)
}
答案 0 :(得分:0)
复制此算法时,缩进可能存在一些问题。但是,如果将MAX_HEAPIFY(A,largest)
置于此if(largest!=i)
条件下,则算法是正确的。有关更多说明,请参见下面的算法:
MAX_HEAPIFY(A,i,heapsize){
l=2i;
r=2i+1;
if(l<=heapsize&& A[l]>A[i])
largest=l;
else
largest=i;
if(r<=heapsize&&A[r]>A[largest])
largest=r;
if(largest!=i) {
swap(A[i],A[largest])
MAX_HEAPIFY(A,largest)
}
}