二分查找
使用二分查找的前提
模板
常见的二分查找应用比如猜数字游戏。
// 二分查找适用于有序的数组
// 这个一个最简单的二分查找算法,前提是数组中不存在重复元素
function binarySearch(arr, target) {
if (arr && Array.isArray(arr)) {
if (!arr.length) return -1
let left = 0
let right = arr.length - 1
while (left <= right) {
// let mid = Math.floor((left + right) / 2)
let mid = Math.floor(left + (right - left)/2) // 防止left, right过大相加导致数值溢出
if (arr[mid] === target) {
return mid
}
if (arr[mid] > target) {
right = mid - 1
} else {
left = mid + 1
}
}
return -1
}
}
// 二分查找除了使用循环实现以外还可以使用递归实现
function bsearch(arr, target) {
if (arr && Array.isArray(arr)) {
return bsearchInternally(arr, 0, arr.length - 1, target)
}
}
function bsearchInternally(arr, left, right, target) {
if (left > right) return -1
let mid = Math.floor(left + (right - left) / 2)
if (arr[mid] === target) {
return mid
}
if (arr[mid] > target) {
return bsearchInternally(arr, left, mid - 1,