二分查找
整数二分
1、确定分界点 mid = l + r >> 1
2、判断分界区间,(1)如果查找的值是在左边 :r = mid,(2)如果是在右边 l = mid
//目标值在右边private static int binSearch(Integer[] q, int num, int l, int r) {while (l < r) {int mid = l + r + 1 >> 1;if (q[mid] <= num) l = mid;else l = mid - 1;}if (q[l] == num) return l;else return -1;}
//目标值在左边private static int binSearch(Integer[] q, int num, int l, int r) {while (l < r) {int mid = l + r >> 1;if (q[mid] >= num) r = mid;else l = mid + 1;}if (q[l] == num) return l;else return -1;}
浮点数二分(经典问题,求开平方的值)
1、定义分界点 mid = (l + r) / 2
2、不需要考虑边界
public static void main(String[] args) {Scanner sc = new Scanner(System.in);double x = sc.nextDouble();double l = 0;double r = x;while (r - l > 1e-8){double mid = (l + r) / 2;if (mid * mid >= x) r = mid;else l = mid;}System.out.println(l);}
