Java面试必备知识点梳理:二分查找算法

file

在计算机世界里“数据结构+算法=程序”,所以算法在程序开发中起着相当重要的做用。虽然咱们在开发中本身设计算法的状况很少,在工做中却离不开算法。不管是开发包提供的算法仍是咱们本身设计的算法,算法在程序中都无处不在。程序员

file

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

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

file

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

file

这里须要强调的是,二分查找算法要求要查找的集合是有序的,若是不是有序的集合,则先要经过排序算法排序后再进行查找。编程

二分查找算法的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。数组

file

面试官一般会在短短两小时内对面试者的知识结构进行全面了解,面试者在回答问题时若是拖泥带水且不能直击问题的本质,则很难充分表现本身,最终影响面试结果。缓存

针对这种状况,**《Offer来了:Java面试核心知识点精讲(原理篇)》**一书出版上市。本书在讲解知识点时不拖泥带水,力求精简,详细介绍了Java程序员面试时常被问及的核心知识点。 file网络

面试在即,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种经典设计模式。

了解本书详情

本文由博客一文多发平台 OpenWrite 发布!

相关文章
相关标签/搜索