二分查找 java

/*
*二分查找思路:
* 前提,数组是有序的
* 先确定一个中间数,让查找的值和中间值比较
* 如查找值大于中间值,向右递归,如小于左递归。等于则直接返回。
*
*/
public class BinarySearch {
public static void main(String[] args) {
int arr[] = {1,2,5,78,100,601};
int resIndex = binarySearch(arr,0,arr.length-1,78);
System.out.println("resIndex = "+resIndex);
}

/**
*
* @param arr 数组
* @param left 左边索引
* @param right 右边索引
* @param findVal 查找数
* @return 找到返回下标 没有返回-1
*/

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 > arr[mid]){//向右递归
return binarySearch(arr,mid+1,right,findVal);

}else if(findVal<arr[mid]){//向左递归
return binarySearch(arr,left,mid-1,findVal);
}else{
return mid;
}
}
}
posted @ 2020-10-05 22:59  Liang-shi  阅读(111)  评论(0编辑  收藏  举报