int[ ] nums={1,2,4,5,6,8,9,12,23,45,67,68,79,80,90,200};
public static int binarySearch(int[ ] nums,int v,int start,int end){
}
思路:
1.计算中间位置的索引
2.用查找的值和中间位置作比较,如果比查找位置的大,递归调用(数组,中间+1,end);
如果小,(数组,start,中间位置-1)
3.直到查找的值和中间位置的相等(找到),或者start大于等于end(未找到),递归结束
方式一:
public class BinarySearch {
public static int binary(int[] nums,int start,int end,int values) {
if(start>end) {
return -1;
}
int mid=(start+end)/2;
if(values<nums[mid]) {
return binary(nums, start, mid-1, values);
}else if(nums[mid]<values) {
return binary(nums, mid+1, end, values);
}else {
return mid;
}
}
public static void main(String[] args) {
int [] nums= {1,2,4,5,6,8,9,12,23,45,67,68,79,80,90,200};
System.out.println("该数字索引为:"+binary(nums,0,nums.length-1,8));
}
}
方式二:
public static int binarySearch(int[] nums,int v,int start,int end) {
//1.结束递归的条件
if(start>end) {
return -1;
}
//2.业务逻辑
//找中间的点;
int mid=(start+end)>>1;
if(nums[mid]==v) {
return mid; //找到
}else if(nums[mid]>v) {//3.向下递归调用
return binarySearch(nums,v,start,mid-1);
}else {
return binarySearch(nums,v,mid+1,end);
}
}