二分查找法也称为折半查找法,是一种效率较高的查找方法。它要求查找表的数据必须是线性存储结构,而且表中的数据是已经排序的 (由小到大或由大到小排序)。二分查找充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用 O(logn) 完成搜索任务

算法思路

  1. 首先设两个指针,low 和 high,表示最低索引和最高索引;
  2. 然后取中间位置索引 middle,判断 middle 处的值是否与所要查找的数相同,相同则结束查找;如果 middle 处的值比所要查找的值小,则把 low 设为 middel + 1;如果 middle 处的值比所要查找的值大,则把 high 设为 middle - 1;
  3. 然后在新区间继续查找,直到找到或者 low > high 找不到所要查找的值时结束查找;

代码实现

  1. function binarySearch(arr, target) {
  2. let low = 0;
  3. let high = arr.length - 1;
  4. let mid;
  5. while (low <= high) {
  6. mid = Math.floor((low + hight) / 2);
  7. if (target < arr[mid]) {
  8. high = mid - 1;
  9. } else if (target > arr[mid]) {
  10. low = mid + 1;
  11. } else {
  12. return mid;
  13. }
  14. }
  15. return -1; // 返回 -1 表示待搜索值不存在
  16. }