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

有人可以帮忙吗?

4

1 回答 1

2

至少有两个,可能三个,我认为它有问题。

它使用(low + high)/2. 如果数组非常大,加法可能会溢出到负数。如果是这样,除以 2 将导致负索引。这可以通过使用来修复(low + high)>>>1

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

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

于 2013-09-23T18:32:28.073 回答