二分查询


二分查询:

package com.cc;

/**
* @Author: cc
* @Create: 2021/12/20
* 二分查询实现步骤:
* 1.前提:有已排序数组A (假设已经做好)
* 2.定义左边界L. 右边界R,确定搜索范围,循环执行二分查找(3. 4两步)
* 3.获取中间索引 M= Flor((L+R) / 2) ==> 存在整数超出最大范围的问题,优化为移位运算:M = (L + R)>>> 1 ;
* 4.中间索引的值 A[M]与待搜索的值T进行比较
* A[M]== T表示找到,返回中间索引
* A[M]> T,中间值右侧的其它元素都大于T,无需比较,中间索引左边去找,M- 1设置为右边界,重新查找
* A[M] * 5.当L>R时, 表示没有找到,应结束循环
*/
public class BinarySearch {
    public static void main(String[] args) {
        int [] array = {1,3,5,6,12,53,65,77,98,123};
        int target = 53;
        int id = binarysearch(array,target);
        System.out.println(id);
    }
    public static int binarysearch(int []a,int t){
        //定义左边界l,右边界r,中间索引m
        int l = 0, r = a.length - 1, m;
        while (l <= r){
            //计算中间索引(在循环内)
            m = (l + r) >>> 1;//移位运算   >>> 1 相当于除以2
            if (a[m] == t){
                return m;
            }else if (a[m] < t){
                l = m + 1;
            }else {
                r = m - 1;
            }
        }
        return -1;
    }
}