算法描述

  1. 前提:已将排序的数组A
  2. 定义左边界L,右边界R,确定搜索范围
  3. 获取中间索引的值M=Floor((L+R))
  4. 中间值索引的值A[M]与查找值相比较
    1. A[M]==T表示找到,返回中建索引
    2. A[M]>T 中间值右侧的其他元素大于T,M-1 设置为右边界,重新查找
    3. A[M]<T 中间值左侧的其他元素小于T,M+1 设置为左边界,重新查找
  5. 当L> R是,表示没有查找到

算法实现

public class Main {

    public static void main(String[] args) {
	// write your code here
        int[] array = {1 ,2,5,7,9,19,24,46,79};
        int target = 19;
        int idx = binarySearch(array, target);
        System.out.println(idx);
    }

    private static int binarySearch(int[] array, int target) {
        int l= 0, r = array.length - 1, m;
        while(l <= r){
            m = (l + r) / 2;
            if (array[m] == target) {
                return m;
            } else  if(array[m] > target){
                r = m-1;
            }else {
                l = m+1;
            }
        }
        return -1;
    }
}

溢出处理

方法1:

int m = l + (r-l)/2