思路分析:
1、首先确定数组的中间下标
int mid = (left + right)/2;
其中有个小细节,为了防止变量溢出(left+right过大),可以用以下方法来表示
int mid = left + (right - left)/2;
2、让你要查找的数target和arr[mid]比较
int[] arr ={1,1,2,4,6,2}; int left = 0; int right = arr.length - 1; int target = 4;
3、如果不匹配,再根据target与mid的关系进行比较
while (left < right){ int mid = left + (right - left)/2; if (target != arr[mid]){ if (target > arr[mid] ){ left = mid + 1; continue; }else right = mid -1;continue; }
4、最后用index来记录值的坐标就好了
总代码:
public void test5(){
int[] arr ={1,1,2,4,6,2};
int left = 0;
int right = arr.length - 1;
int target = 2;
int index = 0;
while (left < right){
int mid = left + (right - left)/2;
if (target != arr[mid]){
if (target > arr[mid] ){
left = mid + 1;
continue;
}else right = mid -1;continue;
}
index = mid;
break;
}System.out.println(index);
}