二分查找
前提:必须是有序数组
思路:首先确定该数组的中间的下标
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;
}
}
}
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号