public static void main(String[] args)
{
int arr[] = {1, 2, 3, 4, 5, 6};
int refen = refen(arr, 5);
System.out.println(refen);
}
private static int refen(int arr[], int value)
{
int i = 0, j = arr.length;
int mid = 0;
while(i < j)
{
mid = (i + j) >>> 1;
if(value < arr[mid])
{
j = mid;
}else if(arr[mid] < value)
{
i = mid + 1;
}else
{
return mid;
}
}
return -1;
}
打印结果:
4
代码解释:
如下代码中j的指向是一个不存在的数组元素,也就是越界了
为什么缩小j的边界时不是m - 1 呢?
j现在只作为一个边界它现在指向的一定不是查找目标
如果改为m - 1就意味着将来j再下次 m - 1 也就是4 -1 = 3它指向的这个13一定不是查找目标,这样就跟我们要查找的目标错过了。
j指向的会被错过,它只是作为边界