java实现二分法查找(递归方式)
/**
* 二分法查找(二分法查找前的数组必须升序排序)
* 递归方式
*/
public class Recursion {
public static void main(String[] arge) {
// 试验参数(数组)
int[] arr ={1,2,3,4,5,6,7,8,9,10};
// 试验获得数组中元素“8”的下标
System.out.println(method(arr,0,arr.length,8));
}
/**
* 递归方式实现二分法查找
* @param arr 需要从中查找元素的数组
* @param min 查找区间数组中起点下标
* @param max 查找区间数组中终点下标
* @param num 需要查找的元素
* @return 如果查找元素存在,返回元素对应数组中的下标,否则返回-1
*/
private static int method(int[] arr,int min,int max,int num) {
//获得查询区间中间数值
int mid = (max + min) >> 1;
//如果查询区间中间数值大于查询元素数值,
if (arr[mid] > num) {
//那么要查询元素位于中间数值的左边,更新查找区间数组中起点下标
max = mid - 1;
//如果查询区间中间数值小于查询元素数值
}else if (arr[mid] < num) {
//那么要查询元素位于中间数值的右边,更新查找区间数组中终点下标
min = mid + 1;
}else {
//如果查询区间中间数值等于查询元素数值,那么返回当前数值下标(因为已经找到了)
return mid;
}
//如果查找区间数组中起点下标大于查找区间数组中终点下标,证明查找元素不在查找的区间内,否则递归调用继续查找
return min > max ? -1 : method(arr,min,max,num);
}
}