常用的算法有查找算法和排序算法。查找算法有线性查找算法、深度优先搜索算法、广度优先搜索算法和二分查找算法,而最常用也最快速的就是二分查找算法了。
二分查找算法又叫作折半查找,要求待查找的序列有序,每次查找都取中间位置的值与待查关键字进行比较,如果中间位置的值比待查关键字大,则在序列的左半部分继续执行该查找过程,如果中间位置的值比待查关键字小,则在序列的右半部分继续执行该查找过程,直到查找到关键字为止,否则在序列中没有待查关键字。
下图中,在有序数组[3,4,6,20,40,45,51,62,70,99,110] 中查找key=20的数据,根据二分查找算法,只需查找两次便能命中数据。
这里需要强调的是,二分查找算法要求要查找的集合是有序的,如果不是有序的集合,则先要通过排序算法排序后再进行查找。
二分查找算法的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。
面试官通常会在短短两小时内对面试者的知识结构进行全面了解,面试者在回答问题时如果拖泥带水且不能直击问题的本质,则很难充分表现自己,最终影响面试结果。 针对这种情况, 《Offer来了:Java面试核心知识点精讲(原理篇)》 一书出版上市。本书在讲解知识点时不拖泥带水,力求精简,详细介绍了Java程序员面试时常被问及的核心知识点。面试在即,Java知识点很凌乱?别急,本书是对Java程序员面试必备知识点的总结,详细讲解了JVM原理、多线程、数据结构和算法、分布式缓存、设计模式等内容,除了原理讲解,还有Java实现!希望本书能够帮助你对Java的基础原理有更深入、全面的理解。
(扫码获取本书详情) 面试时的原理+动手实现脑海已就位,整装待发! 互联网寒冬怕什么~ ▉ 关于作者王磊,现任国内某知名互联网公司大数据技术架构师,有十余年丰富的物联网及大数据研发和技术架构经验,对物联网及大数据的原理和技术实现有深刻的理解。长期从事海外项目的研发和交付工作,对异地多活数据中心的建设及高可用、高并发系统的设计有丰富的实战经验。
▉ 大咖推荐 ● 杨彪 / 美团高级架构师,《可伸缩服务架构》《分布式服务架构》作者 ● 知秋(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种经典设计模式。热文推荐
走向TensorFlow2.0,一步到位
是时候了解一下Serverless了
书单丨24岁的Java,到底有多美?
▼ 点击阅读原文,获取本书详情!