思想:所谓二分查找就是从中间分两半,然后比大小,如果比中间数大就去右边找,比中间数小就在左边找。然后递归。
代码:
const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
function binarySearch(arr, start, end, key) {
if (start !== end) {
// 找中间数的下标
const middle = Math.floor((start + end) / 2);
// 找到就返回下标
if (key === arr[middle]) {
return middle;
} else if (key > arr[middle]) {
// 查找的元素值较大,递归查找右半边
return binarySearch(arr, middle + 1, end, key);
} else if (key < arr[middle]) {
// 查找的元素值较小,递归查找左半边
return binarySearch(arr, start, middle - 1, key);
}
} else {
// 找不到 返回-1
return -1;
}
}
console.log(binarySearch(arr, 0, arr.length - 1, 1)); // 1
console.log(binarySearch(arr, 0, arr.length - 1, 17)); // -1