package com.atguigu.search;
/**
* ClassName: <br/>
* Description: <br/>
* Date: 2021-02-23 15:14 <br/>
* <br/>
*
* @author yufengming
* @version 产品版本信息 2021年02月23日15:14分 yufengming(yufengming@colemak.com) 新建<br/>
* <p>
* 修改记录
* @email yufengming@colemak.com
* @project data_algorithm
* @package com.atguigu.search
*/
public class BinarySearch {
public static void main(String[] args) {
int arr[] = {1, 9, 11, -1, 34, 89}; // 没有顺序的数组
int resIndex = binarySearch(arr, 0, arr.length-1, 1);
System.out.println(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) {
// 么有找到就返回 -1
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;
}
}
}