Java:递归二进制搜索以查找数组的逻辑错误

时间:2017-09-30 18:48:03

标签: java arrays object recursion binary-search

我试图使用二进制搜索递归在数组中找到一个元素。我无法弄清楚程序中的逻辑有什么问题,因为我输出的输出不正确。如果我搜索5,我得到的输出是4.同样,我也没有得到其他情况的正确结果。这个程序可能有什么问题?

public class OrdArray {
    private long[] a;
    private int nELems;


    public OrdArray(int max){


    a=new long[max];
        int nElems=0;
    }

    public int size(){
        return nELems;
    }

    public void insert(int value){
        int j;
        for(j=0;j<nELems;j++){
            if(a[j]>value){
                break;
            }
        }
        for(int k=nELems;k>j;k--){
            a[k]=a[k-1];
        }
        a[j]=value;
        nELems++;
    }

    public void display(){
        for(int i=0;i<nELems;i++)
        System.out.print(a[i]+" ");
        System.out.println(" ");
    }

    public int Recursionfind(int low,int high,int key){

        if(low>=high){
            return nELems;
        }

        int mid=(low+high)/2;

        if(a[mid]== key){
            return mid;
        }

        if(a[mid]>key){
            return Recursionfind(low,mid-1,key);
        }

        else{
            return Recursionfind(mid+1,high,key);
        }

    }
}


class OrderedApp{
    public static void main(String[] args) {
        int maxsize=100;
        OrdArray arr;
        arr=new OrdArray(maxsize);
        System.out.println("Insert array:");
        arr.insert(3);
        arr.insert(5);
        arr.insert(1);
        arr.insert(7);
        arr.insert(6);
        arr.insert(4);
        arr.insert(8);
        arr.insert(2);
        arr.insert(9);
        arr.display();
        int n=arr.size();
        System.out.println(n);
        int key=5;

        System.out.println("Key is :" + arr.Recursionfind(0,n-1,key));
    }
}

1 个答案:

答案 0 :(得分:0)

错误在于:

if(a[mid]== key){
    return mid;
}

您将搜索到的值与位置mid处的数组值相匹配。如果找到它,则必须返回找到的值而非键。

if(a[mid]== key){
    return a[mid];
}

您还必须将along[]更改为int[]