c中的Max heapify创建无限递归
Max heapify in c creating infinite recursion
这是 max heapify 的程序,我怀疑这个算法,如果一个已经最大的堆被传递给这个函数 MAX_HEAPIFY
在这种情况下 largest
将等于 i
仅直接递归调用 MAX_HEAPIFY
将仅在该递归中执行将无限进行
i am assuming that array index is starting from 1 instead of zero
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)
}
复制此算法时可能缩进有问题。但是如果你把 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)
}
}
这是 max heapify 的程序,我怀疑这个算法,如果一个已经最大的堆被传递给这个函数 MAX_HEAPIFY
在这种情况下 largest
将等于 i
仅直接递归调用 MAX_HEAPIFY
将仅在该递归中执行将无限进行
i am assuming that array index is starting from 1 instead of zero
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)
}
复制此算法时可能缩进有问题。但是如果你把 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)
}
}