📜  js 中的二进制搜索 - Javascript (1)

📅  最后修改于: 2023-12-03 15:16:59.773000             🧑  作者: Mango

JS 中的二分搜索

在 JavaScript 中,二分搜索是一种常用的搜索算法。也称作是二分查找、折半查找、对数查找。它的原理是基于有序数组,将数组划分为左右两个区间,取中间值进行比较后确定在哪个区间继续查找,直至找到目标值或不再存在指定值。它的时间复杂度为 O(log n),效率非常高。

二分搜索的前置条件

为了能够使用二分搜索,数组必须是有序的。如果数组无序,则查找过程会非常困难,二分搜索也无法实现正确的搜索。所以这是使用二分搜索前必须确保的前置条件。

二分搜索的实现
function binarySearch(arr, target) {
  // 左右区间的指针
  let left = 0;
  let right = arr.length - 1;

  while (left <= right) {
    // 取中间值
    let mid = Math.floor((left + right) / 2);

    // 如果中间值正好是目标值,则直接返回下标
    if (arr[mid] === target) {
      return mid;
    } else if (arr[mid] > target) {
      // 如果中间值大于目标值,说明目标值可能在左区间,更新右指针
      right = mid - 1;
    } else {
      // 如果中间值小于目标值,说明目标值可能在右区间,更新左指针
      left = mid + 1;
    }
  }

  // 没有找到目标值,则返回 -1
  return -1;
}

以上代码片段实现了二分搜索的功能。它接受两个参数,一个是要搜索的有序数组,另一个是要搜索的目标值。它返回目标值在数组中的下标,如果不存在,则返回 -1。

二分搜索的应用

二分搜索在实际开发中应用非常广泛。例如:

  • 当要在大量数据中查找指定的值时,可以使用二分搜索加速查找过程。
  • 对于非常大的数组,使用二分搜索可以非常快速地定位起点和终点,以便进行快速的分割和处理。
  • 在搜索引擎中,当需要按照某个关键词进行查找时,可以使用二分搜索加速查找结果的排序。
  • 在游戏开发中,二分搜索可以用来实现快速的敌人搜索、路径规划、距离计算等功能。
总结

二分搜索是一种非常基础、高效的算法,应用广泛。在开发中,如果需要搜索有序数组中的指定值,推荐使用二分搜索。