二分查找
前提:必须是有序数组
思路:首先确定该数组的中间的下标
mid=(left+right)/2
然后让需要查找的数findVal和arr(mid)比较,若你的数组是从小到大
findVal>arr[mid],说明你要找到的数在mid的右边,因此需要递归的向右查询
findVal<arr[mid],说明你要找到的数在mid的左边,因此需要递归的向左查询
什么时候结束递归
找到就结束
找不到也需要结束,当left>right就需要退出
package com.zou.search;
public class BinarySearch {
public static void main(String[] args) {
int arr[]={1,8,10,89,1000,1234};
int reindex=binarySearch(arr,0,arr.length-1,88);
System.out.println("resIndex="+reindex);
}
public static int binarySearch(int[]arr,int left,int right,int findVal){
//当left>right,就表示没有找到
if (left>right){
return -1;
}
int mid=(left+right)/2;
int midVal=arr[mid];
if (findVal>midVal){//向右递归
return binarySearch(arr,mid+1,right,findVal);
}else if (findVal<midVal){//向左递归
return binarySearch(arr,left,mid-1,findVal);
}else {
return mid;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报