非递归实现
function binarySearch(arr, target) {
let left = 0;
let right = arr.length - 1;
let mid;
while (left <= right) {
mid = Math.floor((left + right) / 2);
if (arr[mid] < target) {
left = mid + 1;
} else if (arr[mid] === target) {
return mid;
} else {
right = mid - 1;
}
}
return -1;
}
const target = 5;
const arr = [2, 3, 4, 5, 6, 3];
arr.sort(); // 二分查找先排序
console.log(arr);
console.log(binarySearch(arr, target));
递归法
function binarySearch(arr, target, left, right) {
if (left === undefined) left = 0;
if (right === undefined) right = arr.length - 1;
if (left > right) return -1;
let mid = Math.floor((left + right) / 2);
if (arr[mid] < target) {
return binarySearch(arr, target, mid + 1, right);
} else if (arr[mid] === target) {
return mid;
} else {
return binarySearch(arr, target, left, mid - 1);
}
}
const target = 5;
const arr = [2, 3, 4, 5, 6, 3];
arr.sort(); // 二分查找先排序
console.log(arr);
console.log(binarySearch(arr, target));