二分查找法

(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;
    }
}

posted @ 2022-03-23 08:27  fjhnb  阅读(30)  评论(0)    收藏  举报