Java_二分法查找
你是不是还在困惑什么叫做二分法呢?
1.所谓的二分法就是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。
比如:我们有个数组是int [] a = {1,3,4,5,6}
a.length = 5,那么中间值我们是左边一开始等于0,右边等于4,中间值就是0+(4-0)/2=2(就是求商)
假设定的目标值是5,第一次求中间值a[2]=4所以不行还得继续,因为5>4,所以取右边的,左边最小值就变为a[3]=5,右边不变
3+(4-3)/2=3 那a[3]=5跟目标值一样就取到了
2.是不是经常会碰到这样的算法题目:
题目:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
那根据上面的解题思路用java写了以下的方法
public int search(int [] nums,int target){
//设置左右两边的初始值
int left = 0;
int right = nums.length - 1;
while (left <= right){
//设置中间值的取值方式
int mid = left + (right - left)/2;
if(target == nums[mid]){
System.out.println("找到对应的目标值了");
return mid;
}
// 因为在上个步骤没有找到,并且target < nums[mid],因此mid不再需要考虑
// 所以right = mid - 1,即在[left,mid-1]中继续查找
else if(target < nums[mid]){
right = mid - 1;
}
else if(target > nums[mid]){
left = mid + 1;
}
}
System.out.println("没有找到对应的目标值");
return -1;
}
(2)完整的实现
import java.util.Arrays;
import java.util.Scanner;
public class App
{
//采用二分查找法进行搜索
public static int search(int [] nums,int target){
//设置左右两边的初始值
int left = 0;
int right = nums.length - 1;
while (left <= right){
//设置中间值的取值方式
int mid = left + (right - left)/2;
if(target == nums[mid]){
System.out.println("找到对应的目标值了");
return mid;
}
// 因为在上个步骤没有找到,并且target < nums[mid],因此mid不再需要考虑
// 所以right = mid - 1,即在[left,mid-1]中继续查找
else if(target < nums[mid]){
right = mid - 1;
}
else if(target > nums[mid]){
left = mid + 1;
}
}
System.out.println("没有找到对应的目标值");
return -1;
}
public static void main( String[] args )
{
Scanner in = new Scanner(System.in);
System.out.println("请输入数组的长度");
int a = in.nextInt();
int [] b = new int[a];
for(int i = 0;i<a;i++){
System.out.println("请输入数组的第"+(i+1)+"个数");
b[i] = in.nextInt();
}
Arrays.sort(b);
System.out.println(Arrays.toString(b));
System.out.println("请输入目标数");
int c = in.nextInt();
int d = search(b,c);
System.out.println("返回来的下标是"+d);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~