这个二进制搜索出了什么问题?

时间:2013-09-23 18:13:19

标签: java search binary-search

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;
}

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

至少有两个,可能是三个我能看错的东西。

它使用(low + high)/2。如果阵列非常大,则加法可能会溢出为负数。如果是这样,除以2将导致负指数。这可以使用(low + high)>>>1修复。

没有记录。我猜想如果它在数组中找到键,则返回匹配索引,并且在miss时返回负值。由于缺乏文档,我不确定否定结果应该代表什么。

根据缺少的规格,可能还有其他问题。