二分查找:
二分查找适用有序数列
二分查找有两种一种递归,一种非递归
思路:
1首先确定该数组的中间的下标 mid=(left + right)/2
2然后让需要查找的数,findVal和arr[mid]比较
3。1如果:findVal > arr[mid] 说明你要查找的数在mid的右边,因此需要递归向右查找
3.2 如果findVal < arr[mid] 说明你要查找的数在mid的左边,因此需要递归向左查找
3.3 findVal = arr[mid] 找到了,返回
递归退出的条件:
1找到就结束递归
2遍历完整个数组,仍然没有找到findVal,也需要结束递归(当left>right)
实例代码
/**
*
* @MethodName: binarySearch
* @Description: TODO
* @author 63417
* @param arr 数组
* @param left 左边的索引
* @param right 右边的索引
* @param findVal 查找对象
* @return int 没有找到返回-1
* @date 2021年1月14日
*/
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 = a