算法很美 二分查找递归(java)

大家关注微信公众号 罡罡同学 回复蓝桥杯

可免费获得历年真题和C语言版的真题源代码

二分查找递归(java)

全范围内二分查找
等价于三个子问题:

左边找(递归)
中间比
右边找(递归)
注意:左查找和右查找只选其一

public class Main {
     
	public static void main(String[] args) {
     
		int[] a={
     1,2,3,4,6,8,9,110};
		System.out.println(binarySearch1(a, 0, a.length-1, 8));
	}
    private static int binarySearch1(int[] arr,int low,int high,int key){
        //定义
        if(low > high)
            return -1;
        int mid = low + ((high - low) >> 1); // (low + high) >>>1//防止溢出,移位也更高效。
        int midVal = arr[mid];
        if(midVal < key)
            return binarySearch1(arr, mid + 1, high, key);
        else if(midVal > key)
            return binarySearch1(arr, low, high-1, key);
        else
            return mid; //key found
    }
}

计算低位和高位指针的中间值时,建议使用这个int mid=(low + high) >>>1;

int mid=(low + high) >>>1;//防止溢出,移位也更加高效

说白了就是/2的作用。

再说一下,位运算符:

<<,有符号左移位,将运算数的二进制整体左移指定位数,低位用0补齐。 (因为二进制最右边一位,要么是0要么是1,如果是1的话就会导致是奇数。所以<<则为偶数)

>>>,无符号右移位,不管正数还是负数,高位都用0补齐(忽略符号位) (上面的就相当于二进制右移动,÷2)

谢谢大家的支持,您的一键三连是 罡罡同学前进的最大动力!

一键三连 一键三连 一键三连 一键三连 一键三连 一键三连

你可能感兴趣的:(JAVA,算法很美,java,二分查找,递归)