当前位置:   article > 正文

java实现二分查找_java二分查找

java二分查找

文章目录

 1、什么是二分查找?

 2、二分查找的优缺点是什么?

 3、二分查找的前提:

 4、二分查找原理解析(java代码实现)

5、 图解说明


 1、什么是二分查找

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。(引用自百度百科

 2、二分查找的优缺点是什么?

二分查找(折半查找)算法,是数据结构中一个典型的算法,它的查询速度是非常快的,比较次数少,平均性能好。但是其也有缺点,缺点就是二分查找必须有个前提就是数组是有序的,而且插入删除都比较困难。

 3、二分查找的前提

必须是一个有序的序列。

 4、二分查找原理解析(java代码实现)

 首先我们定义一个数组

 int[] arr = {11, 22, 33, 44, 55, 66, 77};

二分查找是由两个变量:left索引和right索引控制查询范围,通过不断的折半范围来缩小查询区间实现查询数据。下面通过java语言来实现二分查找。

首先主方法内定义好数组arr,并且定义需要查询的值(这个值可以通过Scanner对象在控制台获取,为了演示我就直接赋值了),然后输出结果。

  1. public static void main(String[] args) {
  2. int[] arr = {11, 22, 33, 44, 55, 66, 77};
  3. //定义需要查询的值
  4. int select_value = 66;
  5. int index= getIndex(arr,select_value);
  6. System.out.println("查询值所对应的索引为:" + index);
  7. }

 接下来就是定义一个方法用来实现二分查找了,这里我定义了一个有参有返回值的方法getIndex,里面传递了两个参数,一个为数组arr,另一个就是需要查询的值select_value。

  1. public static int getIndex(int[] arr,int select_value) {
  2. //初始化最小值的索引为0
  3. int left = 0;
  4. //初始化最大值的索引为arr.length-1
  5. int right = arr.length - 1;
  6. //首尾相加再除以2得出中间索引
  7. int mid = (left + right) / 2;
  8. while (left<=right) { //确保程序不会重复查询,不会越界
  9. if (select_value > arr[mid]) {
  10. //如果查询的值比中间值大,则往右边区域找,就把最小索引改为中间索引右移一位
  11. left = mid + 1;
  12. } else if (select_value < arr[mid]) {
  13. //如果查询的值比中间值小,则往左边区域找,就把最大索引改为中间索引左移一位
  14. right = mid - 1;
  15. } else {
  16. //剩余的情况就是查询到了结果,那么就直接返回索引。
  17. return mid;
  18. }
  19. mid = (left + right) / 2;
  20. }
  21. //没有查询到,则返回-1
  22. return -1;
  23. }

5、 图解说明

下面我就用图解的形式来分析一下具体的实现原理,纯手工制作,图丑大家勿喷0.0。

首先我们定义一个left和right变量,对应的就是数组的索引0和索引arr.length-1。

 通过(left + right) / 2折半计算,我们算出mid=3的(java中int类型相除得出还是int类型,原本是3.5的值会被转变为int型变为3)。 此时arr[mid]的值为44,并不是我们寻找的66,通过比较66是比44大的,就会进入第一个if语句里面。

 为了缩小范围进行查找,我们需要把left索引移到中间索引的右边,而right索引保持不变,此时原本索引0-6的范围瞬间缩小到了4-6,距离我们的目标66也越来越近。

 我们此时再次进行(left + right) / 2折半计算,得到mid=5,此时mid索引就会移到到索引为5的位置,这时while循环并没有结束,再次while循环接着判断,发现这次arr[mid]的值刚好就是我们目标寻找的值66,那么就直接返回mid值为5,主方法里面通过调用getIndex方法获取到5,输出到控制台。

 输出结果

 

 这是目标值在右边的情况,左边的情况与右边原理相同,不同的是保持left位置不变,让right索引移到了中间索引mid的左边mid-1,这样就可以在左边区域进行寻找目标值。

 欢迎大家指出不足的地方,我看到会在第一时间补充。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/502569
推荐阅读
相关标签
  

闽ICP备14008679号