coolliyong.github.io

简单查找和二分查找

简单查找

/**
 * 线性查找
 *
 * @param {*} [list=[]]
 * @param {*} val
 * @returns
 */
function lineFind(list = [], val) {
  for (let i = 0; i < list.length; i++) {
    if (list[i] === val) {
      return i
    }
  }
  return -1
}

运行时间

T(n) = O(n)

优缺点:

  1. 可以在有序无序下数组中查找
  2. 时间为 O(N)

二分查找

'对数'

/**
 * 二分查找
 *
 * @param {*} [list=[]]
 * @param {*} val
 */
function binarySort(list = [], val) {
  let left = 0
  let right = list.length - 1
  let mid
  while (left < right) {
    // 中间数 向上取整
    mid = Math.ceil((left + right) / 2)

    if (list[mid] === val) return mid

    if (list[mid] > val) {
      right -= 1
    } else {
      left += 1
    }
  }
  return -1
}

运行时间

优缺点:

  1. 只能在有序数组中查找
  2. 时间为 O(logn)