二分查找的递归解法
全范围内二分查找
等价于三个子问题:
左边找(递归)
中间找
右边找(递归)
public class 二分查找递归解法 {
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, key);
else
return mid; //key found
}
}
知识点:
- <<
- >>>
<<,有符号左移位,将运算数的二进制整体左移指定位数,低位用0补齐。 (因为二进制最右边一位,要么是0要么是1,如果是1的话就会导致是奇数。所以<<则为偶数)
>>>,无符号右移位,不管正数还是负数,高位都用0补齐(忽略符号位) (上面的就相当于二进制右移动,÷2)