
二分查找(Binary Search)也称折半查找,它是一种效率较高的查找方法,但二分查找要求线性表必须采用顺序存储结构,并且表中元素按关键字有序排列。
他的核心思想是:首先确定该数组的中间下标:mid = (left + right) / 2,然后让arr[mid]和要和查找的元素比较,如果要查找的元素更大,说明应该向右查找,反之向左;将左(右)边当成一个新数组,重复第一第二步,即进行递归。找到了就结束递归,或者遍历完了数组也没找到,也结束递归。
public static int binarySearch(int[] arr, int num) {
return binarySearch(arr, 0, arr.length - 1, num);
}
public static int binarySearch(int[] arr, int left, int right, int num) {
//如果没有找到
if (left > right || num < arr[0] || num > arr[arr.length - 1]) {
return -1;
}
//获取中间索引
int mid = (left + right) / 2;
//往左边递归找
if (num < arr[mid]) {
return binarySearch(arr, left, mid - 1, num);
}
//往右边递归找
else if (num > arr[mid]) {
return binarySearch(arr, mid + 1, right, num);
}
//数据位置找到
else {
return mid;
}
}