漫画:什么是二分查找?


戳蓝字“CSDN云计算”关注我们哦!

640?wx_fmt=jpeg


作者 | 蠢萌的小灰

来源 | 程序员小灰

640?wx_fmt=jpeg

640?wx_fmt=jpeg



—————  第二天  —————



640?wx_fmt=jpeg

640?wx_fmt=jpeg


640?wx_fmt=jpeg


什么意思呢?我们来举两个栗子:


给定一个有序数组 

2,5,7,9,12,14,20,26,30


Case 1:

640?wx_fmt=png


Case 2:

640?wx_fmt=png

640?wx_fmt=jpeg


640?wx_fmt=jpeg


640?wx_fmt=jpeg

640?wx_fmt=jpeg


640?wx_fmt=jpeg


640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg



————————————



640?wx_fmt=jpeg

640?wx_fmt=jpeg


640?wx_fmt=jpeg


640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg


640?wx_fmt=jpeg

640?wx_fmt=jpeg


640?wx_fmt=png


640?wx_fmt=jpeg


640?wx_fmt=jpeg


为什么说这样效率最高呢?因为每一次选择数字,无论偏大还是偏小,都可以让剩下的选择范围缩小一半。


给定范围0到1000的整数:


640?wx_fmt=png



第一次我们选择500,发现偏大了,那么下一次的选择范围,就变成了1到499:


640?wx_fmt=png


第二次我们选择250,发现还是偏大了,那么下一次的选择范围,就变成了1到249:


640?wx_fmt=png


第三次我们选择125,发现偏小了,那么下一次的选择范围,就变成了126到249:


640?wx_fmt=png


以此类推,最坏的情况需要猜测多少次呢?答案是 log1000 = 10次,也就是让原本的区间范围进行10次 “折半”。



刚才我们所分析的是猜数字的游戏。如果我们把场景转换成最初的面试问题:在包含1000个整型元素的有序数组中查找某个特定整数,又该如何去做呢?


同样道理,我们可以首先判断下标是499的元素(因为数组下标从0开始,到999结束),如果元素大于要查找的整数,我们再去判断下标是249的元素,然后判断下标124的元素......以此类推,直到最终找到想要的元素,或者选择范围等于0为止。


上述这个过程,就是所谓的二分查找算法,查找的时间复杂度是log(n)


640?wx_fmt=jpeg


640?wx_fmt=jpeg


  1. public static int binarySearch(int []array,int target){ static int binarySearch(int []array,int target){
  2.     //查找范围起点//查找范围起点
  3.     int start=0;int start=0;
  4.     //查找范围终点//查找范围终点
  5.     int end=array.length-1;int end=array.length-1;
  6.     //查找范围中位数//查找范围中位数
  7.     int mid;int mid;
    1. //迭代进行二分查找
  8.     while(start<=end){while(start<=end){
  9.         mid=(start+end)/2;end)/2;
  10.         if(array[mid]==target){if(array[mid]==target){
  11.             return mid;return mid;
  12.         }else if(array[mid]<target){else if(array[mid]<target){
  13.             start=mid+1;1;
  14.         }else{else{
  15.             end=mid-1;end=mid-1;
  16.         }
  17.     }
  18.     return -1;return -1;
  19. }


  20. public static void main(String[] args) { static void main(String[] args) {
  21.     int[] array = new int[1000];int[] array = new int[1000];
  22.     for(int i=0; i<1000;i++){for(int i=0; i<1000;i++){
  23.         array[i] = i;
  24.     }
  25.     System.out.println(binarySearch(array, 173));System.out.println(binarySearch(array, 173));
  26. }


640?wx_fmt=jpeg


640?wx_fmt=jpeg


640?wx_fmt=jpeg


640?wx_fmt=png


640?wx_fmt=jpeg


640?wx_fmt=jpeg



640?wx_fmt=png


640?wx_fmt=jpeg


福利

扫描添加小编微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!


640?wx_fmt=jpeg


推荐阅读:

  • IEEE 回应禁止华为系审稿人;WiFi联盟、蓝牙联盟已恢复华为成员资格;中国计算机学会:暂时中止与IEEE通信学会合作……

  • ARM 发布新一代 CPU 和 GPU,实现 20% 性能提升!

  • 前端开发 20 年变迁史

  • 北漂杭漂的程序员,是如何买到第一套房子?

  • “爱装X”开源组织:“教科书级”AI知识树究竟长什么样?

  • 500行Python代码打造刷脸考勤系统

  • 权游播完了, 你在骂烂尾, 有人却悄悄解锁了新操作……


640?wx_fmt=png真香,朕在看了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523431.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql和mysqldump出现command not found 问题解决

mysql和mysqldump出现command not found 问题解决 一、给mysql配置环境变量 #找到mysql安装路径 cd /app/mysql-5.7.25 #vim /etc/profile export MYSQL_HOME/app/mysql-5.7.25 :${MYSQL_HOME}/bin二、建立软连接 1、查找mysql安装路径 find / -name mysql 通常mysql安装路径…

如何给老婆解释什么是微服务?(文末有福利)

戳蓝字“CSDN云计算”关注我们哦&#xff01;程序员有了老婆之后就是累&#xff0c;上次好不容易给她解释了什么是Restful&#xff0c;这不&#xff0c;麻烦又来了…一个周日的清晨&#xff0c;阳光洒在我的脸上&#xff0c;慢慢把我唤醒。我翻过身&#xff0c;感觉好像少了些什…

oracle19c连接MySQL_oracle19c的安装和使用navicat连接oracle数据库

一&#xff0c;数据的安装Oracle官方下载链接&#xff1a;https://www.oracle.com/downloads/#category-database首先去oracle官网下载&#xff0c;数据库里面包含了客户端&#xff0c;所以不需要再下载客户端了注意&#xff1a;有的人不下载数据库&#xff0c;只下载客户端为了…

Mycat_MySql更新数据库失败 --read-only

接上一篇&#xff1a;企业实战_20_Mycat-Web之UI监控 https://blog.csdn.net/weixin_40816738/article/details/100100053 #登录数据库 mysql -uroot -p #使用指定数据库 use 数据库名 #查看数据库处于什么状态下 show variables like read-only; #关闭read-only属性状态 set g…

Linux 运维必备的 13 款实用工具,拿好了

戳蓝字“CSDN云计算”关注我们哦&#xff01;来源 | 高效运维本文介绍几款 Linux 运维比较实用的工具&#xff0c;希望对 Linux 运维人员有所帮助。1. 查看进程占用带宽情况 - NethogsNethogs 是一个终端下的网络流量监控工具可以直观的显示每个进程占用的带宽。下载&#xff1…

java joda datetime_Joda Time项目和java8时间api

Joda Time出现的背景在java1.0中&#xff0c;对日期和时间的支持只能依赖java.util.Date类。正如类名所表达的&#xff0c;这个类无法表示日期&#xff0c;只能以毫秒的精度表示时间。更糟糕的是它的易用性&#xff0c;由于某些未知的设计决策&#xff0c;这个类的易用性被深深…

企业实战_12_MyCat水平扩展_分库分表

接上一篇&#xff1a;企业实战_11_MyCat垂直拆分相关配置 https://gblfy.blog.csdn.net/article/details/100055838 文章目录一、概念理论理解1. 垂直拆分理解2. 水平扩展理解3. 水平扩展案例4. 水平扩展场景5. 水平拆分原则6. 水平扩展架构图二、关键问题解决方案2.1. 分片后如…

面试阿里,我还是挂在了第四轮……

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 倪升武责编 | 郭 芮可能每个技术人都有个阿里梦&#xff0c;我也不例外。最近准备跳槽&#xff0c;前一阵子在准备各种面试&#xff0c;也面了几个大厂&#xff0c;包括阿里。是的&#xff0c;最后我挂在了第四轮。这篇文章…

php读取模板生成静态功能,php 生成静态页面的办法与实现代码详细版

php中主要用到的就是要用到fread()和fwirte()。而静态页面生成了之后&#xff0c;就会牵扯到修改的问题。这里可以用到正则匹配的方法来替换模版中改变的部位。不过此种方法太麻烦&#xff0c;值得推荐的方法是直接把原来生成的模版砍掉&#xff0c;重新生成&#xff0c;呵呵&a…

Mycat+Mysql 插入数据报错 i[Err] 1064 - partition table, insert must provide ColumnList

逻辑库结构和物理库表结构如下(逻辑库结构物理库表结构)&#xff1a; CREATE TABLE order_key (id int(11) NOT NULL AUTO_INCREMENT COMMENT 主键,goods_name varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 商品名称,place varchar(2…

php微信支付使用ajax,接入微信公众号支付,选择支付方式后,只弹出“error’”(php)...

这个怎么感觉不用ajax去请求什么啊&#xff1f;WeixinJSBridge不是已经封装好公众号支付的方法了吗&#xff1f;如果你已经在php里面完成统一下单过程了&#xff0c;那直接调用WeixinJSBridge的支付方法就行了&#xff1a;var jsApiParamObj <?php echo $jsApiParamList; …

企业实战_16_MyCat全局自增ID

接上一篇&#xff1a;企业实战_15_MySql主从复制到MyCat总结 https://gblfy.blog.csdn.net/article/details/118657995 文章目录一、准备工作1. Mycat全局自增实现思路2. 创建mycat数据库3. 导入初始化脚本4. 登录验证二、配置文件修改2.1. server.xml配置2.2. 添加数据节点2.3…

微服务精华问答 | 如何理解中台战略和微服务

戳蓝字“CSDN云计算”关注我们哦&#xff01;微服务(Microservice Architecture)是近几年流行的一种架构思想,关于它的概念很难一言以蔽之。今天&#xff0c;就让我们来看看关于微服务更加有深度的问题吧。1Q&#xff1a;什么是微服务A&#xff1a;1&#xff09;一组小的服务&a…

php 对象转换成数组,PHP把对象转换为数组的问题

原始对象object(Qiniu\Http\Error)#24 (2) {["url":"Qiniu\Http\Error":private]>string(25) "http://rs.qbox.me/buckets"["response":"Qiniu\Http\Error":private]>object(Qiniu\Http\Response)#25 (6) {["sta…

华为内测基于Android 10.0的EMUI 10系统;2019年Q1真无线耳机市场份额,苹果占半壁江山……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 苹果获得悬停手势专利 可隔空…

企业实战_17_MyCat水平扩展_跨分片查询_ER分片

接上一篇&#xff1a;企业实战_16_MyCat全局自增ID https://blog.csdn.net/weixin_40816738/article/details/100064315 案例比较&#xff1a; 在垂直拆分场景中&#xff0c;针对字段个数少的类型为字典类型的表&#xff0c;我们可以使用全局表的方式解决。 在水平扩展场景中&a…

bmob php支付,支付服务 - 支付服务RESTful 开发文档 - 《Bmob 文档中心》 - 书栈网 · BookStack...

注意&#xff1a;目前支付宝无法使用&#xff0c;请用户暂时不要接入&#xff0c;等待官方的恢复公告&#xff01;打款需知1.打款前请先在控制台填写以下信息2.每月的1、2、16、17号为申请打款时间&#xff0c;15号、月尾日为打款时间&#xff0c;确保用户有半个月的追诉期。Bm…

企业实战_22_MyCatSQL拦截

接上一篇&#xff1a;企业实战_21_MyCat_keepalived 安装配置验证 https://gblfy.blog.csdn.net/article/details/100073474 Mycat SQL拦截应用场景&#xff0c;可以指定监控的sql类型 文章目录1. 在server.xml文件中添加sql拦截属性标签2. 测试验证3. 查看sql拦截监控日志1. 在…

MongoDB凭什么跻身数据库排行前五?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 孙浩峰DB-Engines 数据库流行度排行榜发布了5 月份的数据&#xff0c;前六名的排名“千年不变”&#xff0c;分别是&#xff1a;Oracle、MySQL、Microsoft SQL Server、PostgreSQL、MongoDB 和IBM Db2。而其中&#xff0c;Mo…

PHP字符串运算结果,PHP 实现后缀表达式(接受四则运算字符串,输出计算结果,附代码)...

最近接触了一个有趣的需求&#xff1a;给定变量a、b、c、d等若干&#xff0c;要求由用户输入的普通四则运算字符串(包含加减乘除括号)&#xff0c;算出具体的值。例如&#xff0c;a1&#xff0c;b2&#xff0c;c3&#xff0c;d4&#xff0c;给出 ab/(d-c)&#xff0c;应计算出结…