簡體   English   中英

Java:遞歸二進制搜索以查找數組的元素-邏輯錯誤

[英]Java:Recursion Binary search to find element of an array-Logical error

我正在嘗試使用二進制搜索遞歸在數組中查找元素。 由於輸出不正確,我無法弄清楚程序中的邏輯出了什么問題。 假設我搜索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));
    }
}

錯誤在這里:

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

您在匹配的地方搜索價值,你的陣列的價值mid 如果找到它,則必須返回找到的值而不是鍵。

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

您還必須將along[]更改為int[]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM