1 假设有一个数组[1, 3, 5, 6, 23, 300],要从中找到23
2 有多种方法完成这个任务
(1)我们可以从小到大按顺序一个一个的对比,直到找到目标数字,或者反过来
(2)从中间开始查找,判断大小,如果要查找的数大于中间的数,接着取后一半查找,如果要查找的数小于中间的数,就去前一半查找,一次类推,也就是二分法查找
3 使用二分法查找的目的是减少查找次数,缩短查找时间
4 上代码
public class Demo01 {public static void main(String[] args) {int[] array = {23, 1, 3, 300, 5, 6};Demo01.m1(array, 5);}public static void m1(int[] array, int number) {Arrays.sort(array); // 升序排序int begin = 0; // 数组的第一个索引int end = array.length - 1; // 数组的最后一个索引while (begin <= end) {int middle = (begin + end) / 2;if (number > array[middle]) {begin = middle + 1;} else if (number < array[middle]) {end = middle - 1;} else {System.out.println(number + " 存在,索引为 " + middle);return;}}System.out.println("没有找到 " + number);}}
5 代码讲解
示例数组[1, 3, 5, 6, 23, 300]数组必须是有序的,一般都是升序排序,使用Arrays类的静态方法sort(),先对无序的数组进行排序循环查找的条件是begin要小于等于end,如果begin大于end,说明没有找到这个数,结束循环 number与中间的索引处的数进行对比,如果number比array[middle]大,就将middle加1,作为新的begin,如果number比array[middle]小,就将middle减1,作为新的end
关于二分法查找就讲到这里,如有纰漏,欢迎指正,感激不尽,谢谢!
如果觉得《java 二分查找_Java二分法查找》对你有帮助,请点赞、收藏,并留下你的观点哦!