二分查找法,顾名思义,就是一直除以2,找中间部分,例如:1024中的任何一个数都能在10次内准确的猜出来。那么我们查找内容也可以使用二分法快速查找,其实很多时候找bug用的就是这种方法。
package Action; public class test { public static void main(String[] args) { int[] arr = { 1, 2, 3, 4, 5, 6 }; System.out.println(search(arr, 2, 0, arr.length - 1)); System.out.println(search(arr, 5, 0, arr.length - 1)); } /** * @search 返回被查找的数的位置下标 * @param arr 查找的数组 * @param n 是要查找的数 * @param begin 低位 * @param end 高位 * @return */ public static int search(int[] arr, int n, int begin, int end) { int mid = (begin + end) / 2;//(开始坐标+结束坐标)/2,找中点 if (n < arr[begin] || n > arr[end] || arr[begin] > arr[end]) { return -1;// 结束 } System.out.println("begin:"+begin+"——end:"+end+"——center:"+mid); if (arr[mid] < n) { return search(arr, n, mid + 1, end); } else if (arr[mid] > n) { return search(arr, n, begin, mid - 1); } else { return mid; } } }
执行效果:
begin:0——end:5——center:2
begin:0——end:1——center:0
begin:1——end:1——center:1
1
begin:0——end:5——center:2
begin:3——end:5——center:4
4
可以看到,最终要找的2和5就是在下标的1和4处,而且计算速度也是比较快的。
这个比较好理解,希望能对大家有点帮助。