以下代码是我尝试创建递归二进制方法的方法..
public static int binarySearch(Comparable[] objArray, Comparable item)
{
int lower=0;
int upper=objArray.length -1;
int i = -1;
int compareResult;
boolean found = false;
while ((lower<=upper) && (!found))
{
i=(lower+upper)/2;
compareResult=item.compareTo(objArray[i]);
if(compareResult<0)
{
upper=i-1;
}
else
if (compareResult>0)
{
lower=i+1;
}
else
{
found=true;
}
}
return compareResult;
}
我觉得我没有正确地做这个......有什么建议吗?
-D
答案 0 :(得分:1)
您正在使用循环。为了使您的方法具有递归性,它需要调用自身直到达到某种破坏条件。
基本上,你的“while”条件将是破坏递归的条件(即阻止方法调用自身),而当前循环的内容将改为设置“upper”和“lower”参数下一次递归电话。
答案 1 :(得分:1)
二进制搜索的指导原则是,在这种情况下,将数组切成两半,然后检查可比对象是否大于或等于数组中间的对象。如果它的较小,则将上部设置为小于中间的一个(因为它已经被检查过),并且下部保持不变。如果更高,则向下移动到中间加一,然后上部保持不变。继续以递归方式执行,直到找到对象或在上面==更低时失败。
如果您正在比较对象,我会编写您自己的compareTo()方法,以便您测试对象是否更大,更小或相等。