二分查找,就是通过每次将查找范围缩小一半的方法,最终锁定目标。话不多说,直接看最基础的二分查找模型
二分查找基础模型
输入:
一个有序数组,int[] arr
一个目标值,int key
输出:
目标值的索引位置
我们通过图解来理解二分查找
二分查找本质上是一个递归查找的过程,每一次的递归运算分三步
第一步,判断数组的正中心(center)是否为key,如果是,输出结果,如果不是,进入下一步
注:当数组size为偶数,也就是说没有中心的时候,我们任选中心两个数据之一作为中心
在这个例子中,显然中心arr[8]不等于key
第二步,判断key在center的左边还是右边
因为这是一个有序数组,我们可以通过判断大小,判断左右。在这个例子中key<arr[8],key在center的左边。
第三步,在左边,将数组右端点更新为center;在右边,将数组的左端点更新为center。递归
这时我们可以忽略掉arr[8]已经其之后的数据,在下一次的递归中,在0-7的范围内重复上面的过程。
余下过程
代码实现:
public class BinarySearch {
public static int binarySearch(int[] arr, int key) {