我已經編寫了用於在scala中搜索整數數組的二進制代碼,如下所示。我知道二分查找實施起來相當棘手。所以,我想知道這個代碼是否總能正常工作。我已經通過對測試數組進行測試來嘗試它,並且它可以工作。但是,我不確定它是否會始終有效。我的二進制搜索實現能夠正常工作嗎?
NOTE:假設數組大小永遠不會超過最大整數值的一半。
def binarySearch(arr: Array[Int], starti: Int, endi: Int, x: Int) : Int =
{
if (starti > endi)
return -1
val guess = (starti + endi)/2
if (arr(guess) == x)
return guess
if ((guess != 0) && (arr(guess-1) == x))
return guess - 1
if ((guess != endi) && (arr(guess+1) == x))
return guess + 1
if (arr(guess) > x)
return binarySearch(arr, starti, guess-1, x)
else
return binarySearch(arr, guess+1, endi, x)
}
它包含經典的中點計算溢出添加,它可以變爲負值,除以2會使其負值(邏輯移位可以正常工作),然後您的負指數。 – harold
正數如何除以2產生負數?假設數組大小不超過最大整數值。 – pythonic
由2除以不產生負數,加法確實。該部門只是將其保留爲負值,而通過將添加的結果視爲未簽名來處理該部分。 – harold