2013-09-23 42 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来解决。

它没有记录。我猜测它是为了返回匹配索引,如果它发现数组中的键,并在未命中负值。由于缺少文件,我不确定究竟是什么否定结果。

根据缺少的规范,可能会有其他问题。