将有序数组a的后面随机一段一插到数组前面,使用相似二分查找的方法,查找一个元素e。java
将有序数组的后面一部分插到数组前面,使用二分查找查找一个元素。数组
public static int binSearch(int[] array, int n) { int lo = 0; int hi = array.length - 1; int mid = (lo + hi) >> 1; while(lo+1 < hi) { mid = (lo + hi) >> 1; if (array[lo] <= array[mid]) //前面一段 if (array[lo] <= n && n <= array[mid]) hi = mid; else lo = mid; else if(array[mid] <= n && n <= array[hi]) lo = mid; else hi = mid; } if(array[lo] == n) return lo; if(array[hi] == n) return hi; return -1; }
The array: 7 8 9 11 14 15 2 3 4 5 Try find 1's index in array: -1 Try find 3's index in array: 7 Try find 5's index in array: 9 Try find 15's index in array: 5 The array2: 9 11 14 1 2 3 4 5 6 7 Try find 1's index in array2: 3 Try find 3's index in array2: 5 Try find 5's index in array2: 7 Try find 15's index in array2: -1
已知方程为 x^3-x+4 = 0 的根在 [-5, 0] 内,请使用二分查找的求解方法寻找到方程的近似根,要求保留四位小数函数
类二分查找方程的根,能够将循环判断条件改变达到目的。测试
public static double result_search(double lo, double hi) { double mid = (lo + hi) / 2; while(hi-lo > 0.00001){ mid = (lo + hi) / 2; if( f(lo)*f(mid) > 0 ){ lo = mid; } else if( f(hi)*f(mid) > 0 ){ hi = mid; } } return mid; } public static double f(double x){ return x*x*x -x + 4; }
Try to search the root of the equation below: x^3 -x + 4 = 0 (Assert there is only one root of the equation) -1.7963
实现二分搜索中若是有多个重复的数,返回最后一个,code
利用二分查找找到目标元素出现的第一个和最后一个位置,只须要对于二分查找的退出条件,作一个简单的设定就能获得咱们理想的结果,其余都跟二分搜索相似io
public static int lastSearch(int[] array, int n) { int lo = 0; int hi = array.length - 1; int mid = (lo + hi) >> 1; while(lo < hi) { mid = (lo + hi + 1) >> 1; if(array[mid] > n) hi = mid - 1; else lo = mid; } if(array[hi] == n) return hi; return -1; }
The array: index: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 value: 2 3 4 4 5 7 8 9 11 11 11 11 14 15 16 16 16 16 Try find 1's last index in array: -1 Try find 3's last index in array: 1 Try find 4's last index in array: 3 Try find 11's last index in array: 11 Try find 16's last index in array: 17