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;
}
有人可以帮忙吗?
答案 0 :(得分:2)
至少有两个,可能是三个我能看错的东西。
它使用(low + high)/2
。如果阵列非常大,则加法可能会溢出为负数。如果是这样,除以2将导致负指数。这可以使用(low + high)>>>1
修复。
没有记录。我猜想如果它在数组中找到键,则返回匹配索引,并且在miss时返回负值。由于缺乏文档,我不确定否定结果应该代表什么。
根据缺少的规格,可能还有其他问题。