二分查找

前提:必须是有序数组

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

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 @ 2022-02-09 17:10  开源遗迹  阅读(32)  评论(0)    收藏  举报