Java架构师面试必备知识点梳理:二分查找算法(程序员必看!)

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

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

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

01

二分查找算法的原理下图中,在有序数组

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

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


02

二分查找算法的Java实现



二分查找算法的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全套架构师晋级资料

(Java架构师交流企Q鹅裙*/*:445*-*820*-*908

你可能感兴趣的:(Java架构师面试必备知识点梳理:二分查找算法(程序员必看!))