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);
}
}
本文详细介绍了两种不同的二分查找(Binary Search)算法实现方式。第一种通过递归,当查找值小于中间位置的值时,缩小搜索范围到数组的左半部分;反之,搜索右半部分。第二种使用位运算优化计算中间位置,同样根据比较结果调整搜索区间。二分查找算法在有序数组中查找特定元素时效率高,适用于大量数据的快速定位。
2594

被折叠的 条评论
为什么被折叠?



