簡體   English   中英

二進制搜索實現Java算法

[英]Binary search implementation java algorithm

我需要實現二進制搜索算法的幫助,有人可以告訴我我的代碼有什么問題:

public int bsearch(Item idToSearch) { 
    int lowerBoundary = 0;
    int upperBoundary = myStore.size() - 1;
    int mid = -1;

    while(upperBoundary >= lowerBoundary) {
        mid = (lowerBoundary + upperBoundary) / 2;

        //if element at middle is less than item to be searched, than set new lower boundary to mid
        if(myStore.get(mid).compareTo(idToSearch) < 0) {
            lowerBoundary = mid - 1;
        } else {
            upperBoundary = mid + 1;
        }
    } //end while loop

    if(myStore.get(mid).equals(idToSearch)) {
        return mid;
    } else {
        return -1; // item not found
    }
} // end method

我認為您在更新lowerBoundaryupperBoundary時犯了一個錯誤。

可能是:

    if(myStore.get(mid).compareTo(idToSearch) < 0){
        lowerBoundary = mid + 1;
    } else {
        upperBoundary = mid - 1;
    }

而且,如果在mid找到元素,為什么不中斷循環呢?

我會

  • 當上下限相同時停止。
  • 找到比賽時停下
  • 使用mid = (hi + lo) >>> 1; 以避免溢出導致錯誤。
  • 閱讀JDK中的代碼,因為它可以正常工作,所以已經執行了此操作。

第一個問題是邊界,如果他發現了價值,也應該停下來,但他不會這樣做,否則可能會被忽視。

while(upperBoundary >= lowerBoundary)
{
        mid = (lowerBoundary + upperBoundary) / 2;

        if (myStore.get(mid).equals(idToSearch)) break; // goal

        if(myStore.get(mid).compareTo(idToSearch) < 0)
        {
            lowerBoundary = mid + 1;
        }
        else
        {
            upperBoundary = mid - 1;
        }
}

暫無
暫無

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

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