二分查找

整数二分

1、确定分界点 mid = l + r >> 1
2、判断分界区间,(1)如果查找的值是在左边 :r = mid,(2)如果是在右边 l = mid

  1. //目标值在右边
  2. private static int binSearch(Integer[] q, int num, int l, int r) {
  3. while (l < r) {
  4. int mid = l + r + 1 >> 1;
  5. if (q[mid] <= num) l = mid;
  6. else l = mid - 1;
  7. }
  8. if (q[l] == num) return l;
  9. else return -1;
  10. }
  1. //目标值在左边
  2. private static int binSearch(Integer[] q, int num, int l, int r) {
  3. while (l < r) {
  4. int mid = l + r >> 1;
  5. if (q[mid] >= num) r = mid;
  6. else l = mid + 1;
  7. }
  8. if (q[l] == num) return l;
  9. else return -1;
  10. }

浮点数二分(经典问题,求开平方的值)

1、定义分界点 mid = (l + r) / 2
2、不需要考虑边界

  1. public static void main(String[] args) {
  2. Scanner sc = new Scanner(System.in);
  3. double x = sc.nextDouble();
  4. double l = 0;
  5. double r = x;
  6. while (r - l > 1e-8){
  7. double mid = (l + r) / 2;
  8. if (mid * mid >= x) r = mid;
  9. else l = mid;
  10. }
  11. System.out.println(l);
  12. }