1、线性查找

在我们了解二分查找之前,我们先来了解线性查找

线性查找的思想:

我们在对数组遍历的时候,通过每个值每个值的判断去实现我们的待查找的值是否存在当前数组中,如果存在就返回当前的索引。

代码实现:

public int findTarget(int[] arr, int target) {for (int i = 0; i < arr.length; i++) {if (arr[i] == target) {return i;}}return -1;}

此时我们发现当前数组的顺序是无序的,当我们在有序数组中去查找目标数的时候会出现什么样的情况呢?

2、有序数组

int[] arr = {1,2,3,4,5,6,7,8,9,10};

对于上述的有序数组,线性查找时,当我们想查询的数为1时,此时索引正好为0,但是我们想查询的目标数为10的时候,此时我们需要遍历的10次,到数组的结尾,此时的效率就显得比较慢了,在对有序数组排序的时候我们就可以使用二分查找

2.1、二分查找

二分查找又叫折半查找,顾名思义,折半查找的意思就是每次查询的时候对数组折半,原理如下所示:

我们此时进行比较,target = 4与arr[mid]的值,如果比mid位置的数大,我们只需在mid的右边进行查找,因为当前数组为有序数组,mid左边的数都是比mid小的数,所以左边的数我们无需考虑,此时下一步如下:

当前计算的mid=4,即arr[mid]=5,此时的target<mid位置的值,所以我们只需再比较mid左边的值,详细步骤如下:

此时计算的mid=min,此时再进行比较,发现我们需要查找的target的值等于当前mid的值,所以我们直接返回当前mid位置。

代码实现如下:

public int binarySearch(int[] arr, int target) {int max = arr.length -1;int min = 0;int mid = min + (max - min) / 2;while(min < max){if(arr[mid] == target){return mid;}if(arr[mid] < target){min = mid + 1;mid = min + (max - min) / 2;}if(arr[mid] > target){max = mid - 1;mid = min + (max - min) / 2;}}return -1;}

二分查找详解(Java)相关推荐

  1. 【二分查找详解外加递归写法】附有全部代码

    二分查找 二分查找:在有序(升序或降序)的集合上,才能使用二分查找. 二分查找的思路: 在一个有序数组中查找一个数 n,我们可以把 n 与 数组的中间元素(mid)不断的去比较, ​ 若 n < ...

  2. 二分查找详解——弄懂二分思想的重要性!

    哈喽!这里是一只派大鑫,不是派大星.本着基础不牢,地动山摇的学习态度,从基础的C语言语法讲到算法再到更高级的语法及框架的学习.更好地让同样热爱编程(或是应付期末考试 狗头.jpg)的大家能够在学习阶段 ...

  3. C语言经典算法之二分查找详解

    作者:敲代码の流川枫 博客主页:流川枫的博客 专栏:C语言从入门到进阶 语录:Stay hungry stay foolish 集接口文档工具.接口Mock工具.接口自动化测试工具.接口调试工具于一体 ...

  4. 算法与数据结构 - 二分查找详解,会了吗?

    一.引言 相信很多小伙伴都和朋友做过一个小互动: 今天李雷和韩梅梅一起相约去逛街,期间李雷发现韩梅梅穿了一双限量款的球鞋. 李雷: 韩同学,你这双鞋好漂亮哦,在哪里买的呢? 韩梅梅: 这是我在莆田的网 ...

  5. 【数据结构和算法】动图演示,超详细,就怕你不会,二分查找详解

  6. java斐波那契查找_详解Java Fibonacci Search斐波那契搜索算法代码实现

    一, 斐波那契搜索算法简述 斐波那契搜索(Fibonacci search) ,又称斐波那契查找,是区间中单峰函数的搜索技术. 斐波那契搜索采用分而治之的方法,其中我们按照斐波那契数列对元素进行不均等 ...

  7. 异常处理器详解 Java多线程异常处理机制 多线程中篇(四)

    在Thread中有异常处理器相关的方法 在ThreadGroup中也有相关的异常处理方法 示例 未检查异常 对于未检查异常,将会直接宕掉,主线程则继续运行,程序会继续运行 在主线程中能不能捕获呢? 我 ...

  8. 详解Java中的正则表达式

    详解Java中的正则表达式,并列出常用的正则表达式语法和一些常用的场景. 判断一个字符串是否是由数字组成: 当不使用正则表达式的时候的实现代码: public class RegexDemo01 {p ...

  9. java 自动装载_java_详解Java的Spring框架下bean的自动装载方式,Spring容器可以自动装配相互协 - phpStudy...

    详解Java的Spring框架下bean的自动装载方式 Spring容器可以自动装配相互协作bean之间的关系,这有助于减少对XML配置,而无需编写一个大的基于Spring应用程序的较多的和元素. 自 ...

最新文章

  1. 双料状元收割神器来了!清华设立计算机金融双学士学位
  2. Linux入门和运维
  3. 【微信小程序企业级开发教程】微信小程序目录结构
  4. Java多线程:捕获线程异常
  5. 存储安全与数据恢复基础手册-服务器篇
  6. 全国计算机等级考试题库二级C操作题100套(第48套)
  7. 培训工资我看大学培训机构--大学生到底要不要参加培训机构 一个参加培训的大学生的真实感受...
  8. 12款很酷的使用大头照的国外名片设计作品
  9. Flyweight模式
  10. 3.4 常用数据类型的输入 [原创Excel教程]
  11. 编译原理——中间代码生成(逆波兰表示)
  12. 基于okhttp3依赖和gson依赖的快递查询系统
  13. 程序员福利---免费接口
  14. cookies、sessions、token区别
  15. uni-app - H5 网站项目接入集成 51LA 网站统计详细教程(提供 51LA.js 官方插件与引入教程)
  16. QQ轻聊版、TIM版无法修改个人文件夹位置的解决方法
  17. revit软件如何创建放样体量?revi哪个插件好用?
  18. 开源正在蚕食整个世界?
  19. unity_Text文本和图片组合
  20. 后台管理系统2——文件上传功能、富文本编辑器集成

热门文章

  1. Python(序列化json,pickle,shelve)
  2. 电脑微软账户登录一直转圈怎么解决问题
  3. Counterfactual VQA: A Cause-Effect Look at Language Bias
  4. 普中科技手把手教你学ESP32--基于MicroPython-01
  5. mysql无法启动以及cmd下mysql命令无法识别的
  6. limodou的学习记录
  7. GNSS算法进阶(二)- kalman滤波单点定位算法代码实现
  8. 7-1 厘米换算英尺英寸 (JAVA)
  9. excel android vba,你加班1小时做Excel表格,我用VBA只需1分钟!(免费领教程)
  10. 几款优秀的中文字体设计