java睡眠后继续执行_Java面试必备知识点梳理:二分查找算法

7191f54687f849ccd0ff230781b7c00d.png

在计算机世界里“数据结构+算法=程序”,因此算法在程序开发中起着至关重要的作用。虽然我们在开发中自己设计算法的情况不多,在工作中却离不开算法。无论是开发包提供的算法还是我们自己设计的算法,算法在程序中都无处不在。 07e9731e0690bd0b9519474d57056c3e.png

常用的算法有查找算法和排序算法。查找算法有线性查找算法、深度优先搜索算法、广度优先搜索算法和二分查找算法,而最常用也最快速的就是二分查找算法了

二分查找算法又叫作折半查找,要求待查找的序列有序,每次查找都取中间位置的值与待查关键字进行比较,如果中间位置的值比待查关键字大,则在序列的左半部分继续执行该查找过程,如果中间位置的值比待查关键字小,则在序列的右半部分继续执行该查找过程,直到查找到关键字为止,否则在序列中没有待查关键字。

c1bc5b1b8234ab4d0738d8731f70eed2.png

下图中,在有序数组

[3,4,6,20,40,45,51,62,70,99,110] 中查找key=20的数据,根据二分查找算法,只需查找两次便能命中数据。

33ae547d81ea46190051b5b14737d4ff.png

这里需要强调的是,二分查找算法要求要查找的集合是有序的,如果不是有序的集合,则先要通过排序算法排序后再进行查找。

3b0734242de7822139f7ad5d9f5b44a7.png

二分查找算法的Java实现如下,代码定义了方法binarySearch()用于二分查找,在该方法中有3个变量low、mid和high,分别表示二分查找的最小、中间和最大的数据索引。

 1     publicstatic int  binarySearch(int []array,inta){ 2        intlow=0; 3        inthigh=array.length-1; 4        intmid; 5       while(low<=high){ 6           mid=(low+high)/2;//中间位置 7           if(array[mid]==a){ 8               return mid; 9           }else if(a>array[mid]){ //向右查找10               low=mid+1;11           }else{ //向左查找12               high=mid-1;13            }14        }15       return -1;16    }

在以上代码中,通过一个while循环在数组中查找传入的数据,在该数据大于中间位置的数据时向右查找,即最大索引位置不变,将最小索引设置为上次循环的中间索引加1;在该数据小于中间位置的数据时向左查找,即最小索引位置不变,然后将最大索引设置为上次循环的中间索引并减1。重复以上过程,直到中间索引位置的数据等于要查找的数据,说明找到了要查找的数据,将该数据对应的索引返回。如果遍历到low>high还没有找到要查找的数据,则说明该数据在列表中不存在,返回-1。

8d7ea584011f2d335605e13a8d92ea67.png

面试官通常会在短短两小时内对面试者的知识结构进行全面了解,面试者在回答问题时如果拖泥带水且不能直击问题的本质,则很难充分表现自己,最终影响面试结果。 针对这种情况, 《Offer来了:Java面试核心知识点精讲(原理篇)》 一书出版上市。本书在讲解知识点时不拖泥带水,力求精简,详细介绍了Java程序员面试时常被问及的核心知识点。

d2b5c4fdd4e7487b555f5d7327a1f493.png

面试在即,Java知识点很凌乱?别急,本书是对Java程序员面试必备知识点的总结,详细讲解了JVM原理、多线程、数据结构和算法、分布式缓存、设计模式等内容,除了原理讲解,还有Java实现!希望本书能够帮助你对Java的基础原理有更深入、全面的理解。

0d237e977a27735b188b8edd7ba1ec8d.png

(扫码获取本书详情) 面试时的原理+动手实现脑海已就位,整装待发! 互联网寒冬怕什么~ 关于作者

王磊,现任国内某知名互联网公司大数据技术架构师,有十余年丰富的物联网及大数据研发和技术架构经验,对物联网及大数据的原理和技术实现有深刻的理解。长期从事海外项目的研发和交付工作,对异地多活数据中心的建设及高可用、高并发系统的设计有丰富的实战经验。

大咖推荐 ● 杨彪 / 美团高级架构师,《可伸缩服务架构》《分布式服务架构》作者 ● 知秋(simviso) / Java编程方法论系列书籍作者 ● 王新栋 / 京东资深架构师,《架构修炼之道》作者 章节架构 第1章  讲解JVM原理 ,涉及JVM运行机制、JVM内存模型、常用垃圾回收算法和JVM类加载机制等内容。 第2章 讲解Java基础知识 ,涉及集合、异常分类及处理、反射、注解、内部类、泛型和序列化等内容。 第3章 讲解Java并发编程知识 ,涉及Java多线程的工作原理及应用、Java线程池的工作原理及应用,以及锁、进程调度算法等内容。 第4章 讲解数据结构知识 ,涉及栈、队列、链表、散列表、二叉树、红黑树、图和位图等内容。 第5章 讲解Java中的常用算法 ,涉及二分查找、冒泡排序、插入排序、快速排序、希尔排序、归并排序、桶排序、基数排序等算法。 第6章 讲解网络与负载均衡原理 ,涉及TCP/IP、HTTP、常用负载均衡算法和LVS原理等内容。 第7章 讲解数据库及分布式事务原理 ,涉及数据库存储引擎、数据库并发操作和锁、数据库分布式事务等内容。 第8章 讲解分布式缓存的原理及应用 ,涉及分布式缓存介绍、Ehcache原理及应用、Redis原理及应用、分布式缓存设计的核心问题等内容。 第9章 讲解设计模式 ,涉及常见的23种经典设计模式。 8d7ea584011f2d335605e13a8d92ea67.png

  热文推荐 

  • 走向TensorFlow2.0,一步到位

  • 是时候了解一下Serverless了

  • 书单丨24岁的Java,到底有多美?


1b64b81780f6c0994313f12209c44f7e.png

▼ 点击阅读原文,获取本书详情!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值