package shuyan1;
import java.util.*;
//二分查找-递归解法
/*
* 等价于三个字问题:
* 左边找(递归)
* 中间找
* 右边找(递归)
* 注意:左查找和右查找只选其一
*/
public class e {
public static void main(String[] args) {
int arr[]= {1,5,6,7,18,28};
System.out.println("arr["+erfen(arr,0,5,18)+"]="+18);
}
static int erfen(int []arr,int low,int hight,int key) {
// low~hight是要进行查找的范围,low 和 hight 代表数组的下标
if(low>hight) {
// 没有查找到
return -1;
}
int mid=low+((hight-low)>>1);
// 二进制中的右移1位,相当于十进制中的“/2”(除以2)
int midvalue=arr[mid];
if(midvalue<key)//key在midvalue的右边
return erfen(arr,mid+1,hight,key);
// 以"mid+1"为low
else if(midvalue>key)//key在midvalue的左边
return erfen(arr,low,mid-1,key);
// 以"mid-1"为hight
else
return mid;
// key不在查找的范围内
}
}
查找:二分法查找-递归解法 ——java
最新推荐文章于 2024-11-12 21:14:07 发布