二分查找

前提:必须是有序数组

思路:首先确定该数组的中间的下标

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;
}
}
}

 

posted @   开源遗迹  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示