2013-09-23 39 views
-6
public static int binsrch (int[] a, int key) { 
    int low = 0; 
    int high = a.length - 1; 

    while (true) { 
     if (low > high) return -(low+1); 
     int mid = (low + high)/2; 
     if  (a[mid] < key) low = mid + 1; 
     else if (a[mid] > key) high = mid - 1; 
     else return mid; 
} 

任何人都可以幫忙嗎?這個二進制搜索有什麼問題?

+8

如果您發現它完全沒問題,那有什麼問題? –

+6

@codeMan爲什麼不呢? –

+0

你不覺得你應該回到[mid]嗎? – Chaos

回答

2

至少有兩個,可能是三個,我可以看到它的錯誤。

它使用(low + high)/2。如果數組非常大,則可能會溢出負數。如果是這樣,除以2會導致負指數。這可以通過使用(low + high)>>>1來解決。

它沒有記錄。我猜測它是爲了返回匹配索引,如果它發現數組中的鍵,並在未命中負值。由於缺少文件,我不確定究竟是什麼否定結果。

根據缺少的規範,可能會有其他問題。