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);
}
public static int binarySearch(int[] a, int t) {<br /> //获取脚标最大值和最小值<br /> int l = 0;<br /> int r = a.length - 1;<br /> //设置中间值<br /> int m;
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