Java - 递归二进制搜索帮助

时间:2010-11-15 19:28:54

标签: java recursion

以下代码是我尝试创建递归二进制方法的方法..

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

2 个答案:

答案 0 :(得分:1)

您正在使用循环。为了使您的方法具有递归性,它需要调用自身直到达到某种破坏条件。

查看Wikipedia's example

基本上,你的“while”条件将是破坏递归的条件(即阻止方法调用自身),而当前循环的内容将改为设置“upper”和“lower”参数下一次递归电话。

答案 1 :(得分:1)

二进制搜索的指导原则是,在这种情况下,将数组切成两半,然后检查可比对象是否大于或等于数组中间的对象。如果它的较小,则将上部设置为小于中间的一个(因为它已经被检查过),并且下部保持不变。如果更高,则向下移动到中间加一,然后上部保持不变。继续以递归方式执行,直到找到对象或在上面==更低时失败。

如果您正在比较对象,我会编写您自己的compareTo()方法,以便您测试对象是否更大,更小或相等。

相关问题