# 二分查找

将元素对半查找,快速将查找范围缩小一半。

先决条件:

  • 必须是有序的数据,元素按照关键字有序排列
  • 必须是顺序存储结构, 链表无法实现。

/**
 * 二分查找实现
 * @param {Array} data 数组
 * @param {String,Number} search 查找的内容
 */
function binSearch(data, search) {
  // data 为数组

  if (!Array.isArray(data)) return;
  let right = data.length;
  let left = 0;
  while (left <= right) {
    const mid = Math.floor((left + right) / 2);
    if (data[mid] < search) left = mid + 1;
    else if (data[mid] > search) right = mid - 1;
    else return mid;
  }
  return -1;
}

const data = [1, 2, 3, 4, 6, 8, 10, 15, 39, 100, 105, 110, 200];

console.log(binSearch(data, 5));
// 结果:-1

console.log(binSearch(data, 6));
// 结果:4
上次更新: 8/3/2020, 4:02:12 PM