/**
* 二分查找,需要保证数组元素有序
*
* @param arr 要查找的原数组
* @param left 左侧索引
* @param right 右侧索引
* @param findVal 要查找的值
* @return 如果找到返回该值对应的索引,如果没有找到,返回 -1
*/
public static int binarySearch(int[] arr, int left, int right, int findVal) {
//如果数组查找完还没有找到,直接返回 -1
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;
}
}
原文:https://www.cnblogs.com/mx-info/p/14847387.html