【发布时间】:2019-04-09 01:20:04
【问题描述】:
这是最大堆的程序,我怀疑这个算法,如果一个已经最大的堆被传递到这个函数MAX_HEAPIFY在这种情况下largest将等于i,并且直接递归调用@ 987654325@
只会在递归中执行将无限进行
我假设数组索引从 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)
}
【问题讨论】:
-
你希望
l=2i;会做什么? -
@fvu 我编辑了先生
-
这些都不是有效的 C,所以请发布 real 代码。无论如何,如果这是一个算法,那就错了。此代码中没有基本情况弹出;它总是递归调用,所以无论你得到这个,它都是错误的。此外,递归调用中只有 两个 参数,但无论名称代表什么,显然都有 三个。
-
我其实认为你打算写
l=2*i;和r=2*i+1; -
到底为什么要在 C 中实现二进制堆,使用索引 1 作为根?这很愚蠢。见stackoverflow.com/a/49806133/56778
标签: c algorithm data-structures heap