public class BinarySearch {
    //二分查找
    public static void main(String[] args) {
    //存在数组
    int[] arr = {1, 2, 3, 4, 107, 178, 209, 234, 456, 567};
    //要查找的值
    int target = 456;
    int index = binarySearch(arr, target);
    System.out.println(index);
    }

    1. public static int binarySearch(int[] a, int t) {<br /> //获取脚标最大值和最小值<br /> int l = 0;<br /> int r = a.length - 1;<br /> //设置中间值<br /> int m;
    2. while (l <= r) {<br /> m=(l+r)/2;<br /> if (a[m]==t){<br /> return m;<br /> }<br /> else if (a[m]<t){<br /> l=m+1;<br /> }<br /> else {<br /> r=m-1;<br /> }<br /> }<br /> return -1;<br /> }<br />}<br />** 二分查找--整数溢出**

    解决方法1; public class BinarySearch {
    //二分查找
    public static void main(String[] args) {
    //解决整数溢出的方法,起因是因为int类型的数字是有上限的,当第一次判断出要求的值在中间值右边
    int l=0;
    int r=Integer.MAX_VALUE-1;
    //中间值坐标 m
    int m=(l+r)/2;
    // //再次求得中间值对应的坐标时
    // m=(m+r)/2;
    // //此时(m+r)运算出错,结果超出int范围
    // System.out.println(m);
    //要求值在中间值右边,解决办法
    l=m+1;
    m=l+(m-l)/2;
    System.out.println(m);
    }
    }
    解决方法2:
    在计算第二次(l+r)时,将结果右移一位,和除以二的效果一样
    m=(l+r)>>>1