Java中二进制搜索的错误结果

时间:2015-05-31 01:09:08

标签: java

我是编程新手并编写了这个代码用于递归二进制搜索,但输出错误 我尝试过多次调试,但不知道我哪里出错了。

public class Number {
    public static void main (String[] args){
        int []a = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
        int key = 7;
        int mid,low,high;
        low=0;
        high=a.length-1;
        int pos=binarySearch(a,key,low,high);
        System.out.println(key +" is found at "+pos+" position");
    }

    public static int binarySearch(int[]a,int key,int low, int high) {

        int mid=(low+high)/2;

        if(key<a[mid]){
            high=mid-1;
            binarySearch(a,key,low,high);
        }
        else if(key >a[mid]){
            low=mid+1;
            binarySearch(a,key,low,high);
        }
        else if(low>high){
            return -1;
        }
        return mid;
    }
}

3 个答案:

答案 0 :(得分:2)

在递归调用期间,调用者的执行被中断,并且他的执行帧被压入堆栈。当被调用者完成执行时,从堆栈中检索调用者帧并继续执行。你分配了9到中期,你没有重新分配它返回中间。如果您尝试使用不同大小的数组,您将看到始终返回初始mid并且无缘无故地进行所有递归调用。调试一个System.out.println(“return”+ mid);在退货声明面前。

答案 1 :(得分:1)

//ignores found value
binarySearch(a,key,low,high);

应该是

//returns value
return binarySearch(a,key,low,high);

在“if”和“else if”条款中

答案 2 :(得分:0)

您应首先检查mid是否等于键。如果是,请逃避。