二分查找法也称为折半查找法,是一种效率较高的查找方法。它要求查找表的数据必须是线性存储结构,而且表中的数据是已经排序的 (由小到大或由大到小排序)。二分查找充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用 O(logn) 完成搜索任务
算法思路
- 首先设两个指针,low 和 high,表示最低索引和最高索引;
- 然后取中间位置索引 middle,判断 middle 处的值是否与所要查找的数相同,相同则结束查找;如果 middle 处的值比所要查找的值小,则把 low 设为 middel + 1;如果 middle 处的值比所要查找的值大,则把 high 设为 middle - 1;
- 然后在新区间继续查找,直到找到或者 low > high 找不到所要查找的值时结束查找;
代码实现
function binarySearch(arr, target) {
let low = 0;
let high = arr.length - 1;
let mid;
while (low <= high) {
mid = Math.floor((low + hight) / 2);
if (target < arr[mid]) {
high = mid - 1;
} else if (target > arr[mid]) {
low = mid + 1;
} else {
return mid;
}
}
return -1; // 返回 -1 表示待搜索值不存在
}