二分查找法也称为折半查找法,是一种效率较高的查找方法。它要求查找表的数据必须是线性存储结构,而且表中的数据是已经排序的 (由小到大或由大到小排序)。二分查找充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用 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 表示待搜索值不存在}
