一个简单的分搜索算法
在一般情况下, 这个语句是不会出错的, 但是, 当low+high的值超过了最大的正int值 (2^31 - 1) 的时候(即当数据量较大时), mid会变成负值, 这个时候, 会抛出ArrayIndexOutOfBoundsException 异常。
或者
public static int bisearch(int key, int[] a) {
int low = 0, high = a.length - 1, mid = 0;
while (low <= high) {
mid = (low + high) / 2;
if (a[mid] < key) {
low = mid + 1;
} else if (a[mid] > key) {
high = mid - 1;
} else {
return mid;
}
}
return -1;
}
在一般情况下, 这个语句是不会出错的, 但是, 当low+high的值超过了最大的正int值 (2^31 - 1) 的时候(即当数据量较大时), mid会变成负值, 这个时候, 会抛出ArrayIndexOutOfBoundsException 异常。
所以做如下修改即可:
int mid = low + ((high - low) / 2);
或者
int mid = (low + high) >>> 1;