C中的Max heapify创建无限递归

时间:2018-11-05 16:35:42

标签: c algorithm data-structures heap

这是用于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)
   }

1 个答案:

答案 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)
    }
}