package cn.mrlij.search;
/**
* 二分查找:前提是一个有序序列。定义一个有序数组,将要查找的值与数组的中间值比较,如果比中间索引的值小,
* 则向左递归,一直到查找到这个值为止。如果大于中间值,则向右递归。如果正好是中间的这个值的时候,就直接
* 返回该值的索引。
* 注意:1,如果查找的值不存在,就直接返回-1。
* 2,递归结束的条件:一是直接找到该值,二是没有查找到值,left>right就直接返回-1
*/
public class BinarySearch {
public static void main(String[] args) {
int arr[] = {2,4,6,78,88,99};
System.out.println( binarySearch(arr,0,arr.length-1,99));
}
/**
* 二分查找
* @param arr 待查找的数组(有序)
* @param left 左边的索引
* @param right 右边的索引
* @param findVal 要查找的值
*/
public static int binarySearch(int[] arr,int left,int right,int findVal){
int mid = (left+right)/2;//中间值的索引
int midVal = arr[mid];//中间值
if(left>right){
return -1;
}
if(findVal>midVal){
return binarySearch(arr,mid+1,right,findVal);
}else if(findVal<midVal){
return binarySearch(arr,left,mid-1,findVal);
}else {
return mid;
}
}
}