二分查找法
(left+right)/2 可能会导致越界,可以写成left + (right - left)/2, 或者无符号右移 >>>1
public class BinarySearch {
public static void main(String[] args){
int[] arr = new int[]{1,3,7,9,11,12,15,49,50,Integer.MAX_VALUE - 1};
int target = Integer.MAX_VALUE - 1;
System.out.println(binarySearch(arr,target));
}
/**
* 二分查找返回目标数所在下标,没有返回-1
* @param arr
* @param target
*/
private static int binarySearch(int[] arr, int target) {
int left = 0;
int right = arr.length - 1;
int mid = (right + left) >>> 1;
while (left<=right){
if (arr[mid] == target){
return mid;
} else if(arr[mid] < target){
left = mid + 1;
}else{
right = mid - 1;
}
mid = (right + left) >>> 1;
}
return -1;
}
}

浙公网安备 33010602011771号