二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

# 要求:

  1.必须为线性表;

  2.有序;

代码示例:

/**
   * 假定数组为升序排列
   * array: 查找范围
   * target: 目标值
   */
  function binarySearch (array, target) {
    if (!array || array.length === 0) {
      return -1
    }
    let left = 0; // 数据左区间边界
    let right = array.length - 1; // 查找右区间边界
    while (left <= right) {
      const middle = Math.floor((right + left) / 2); // 中间位置
      if (array[middle] === target) {
        return middle
      } else if (array[middle] > target) { // 将左区间边界缩小到middle + 1位置
        left = middle + 1;
      } else { // 将右区间边界缩小到 middle - 1位置
        right = middle - 1; 
      }
    }
    return -1 // 未找到匹配值,则返回-1
  }

  leetcode问题练习: Search Insert Position