02折半查找

84 阅读1分钟

02折半查找

基本思想:在有序数组中,取中间值与查找值进行比较,如果中间值大于查找值,则在左半区继续查找;如果中间值小于查找值,则在右半区查找。
讲解:
    //创建一个名为Binary_search的方法,传入数组a及其大小以及查找值key
    public static int Binary_search(int a[],int n,int key){
        //设置左边界low初始值为0,右边界high初始值为n
        int low = 0,high = n;
        //while循环条件:左边界始终不超过右边界
        while(low <= high){
            //记录中间位置mid的值
            int mid = (low + high) / 2;
            //判断查找值key是否小于中间值
            if(key < a[mid]){
                //如果是则更新右边界high的值为mid - 1
                high = mid - 1;
            //判断查找值key是否大于中间值
            }else if(key > a[mid]){
                //如果是则更新左边界low的值为mid + 1
                low = mid + 1;
            //如果出现查找值key刚好等于中间值a[mid]
            }else{
                //则直接返回此时的mid值,即查找值的下标
                return mid;
            }
        }
        //如果整个while循环结束了,仍未返回,则返回-1,表示该数组中无查找值
        return -1;
    }