算法-二分查找

# 二分查找

只能在升序的数组中使用

实现原理: 左右递减, 取中间下标进行匹配, 如果小于目标值, 左下标向右移动一位, 反之右下标项向左移动一位

点击查看代码












 


 

 

 













/**
 * 二分查找
 * @param {number[]} nums 
 * @param {number} target 
 * @returns number
 */
const binarySearch = (nums, target) => {
  if (nums.length === 0) return -1

  let left = 0,
    right = nums.length - 1
  
  while(left <= right) {
    let mid = left + ((right - left) >> 1)

    if (nums[mid] === target) {
      return mid
    } else if (nums[mid] < target) {
      left = mid + 1
    } else if(nums[mid] > target) {
      right = mid - 1
    }
  }

  return -1
}

// ---------- Test ---------
const nums = [1, 3, 6, 9, 10, 12, 16]
const target = 12
console.log(binarySearch(nums, target))
// 5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32