Skip to main content

二分查找法

CREATE: 2022-03-11 22:14:09

题目:实现一个二分查找的功能 ( 简单😄 )

给定一个有序数组 s,请找出数字 t 的位置,请利用 Ts | Js,实现一个二分查找的功能

分析

  • 遍历:时间复杂度 O(n)
  • 二分法:时间复杂度 O(logn)

可以从图中看到,logn 复杂度到后续越来越快(因为区间越来越小)

学习算法必备:时间复杂度与空间复杂度,你了解多少-linkerror-WinFrom控件库|.net开源控件库|HZHControls官网

题解

function binarySearch(s?: number[], t?: number) {
if (!s || t == undefined) {
return
}

let l = 0,
r = s.length - 1

while (l < r) {
const mid = Math.floor((r + l + 1) / 2)

if (t === s[l] || t === s[r]) {
return t === s[l] ? l : r
}

if (t === s[mid]) {
return mid
} else if (t > s[mid]) {
l = mid + 1
} else {
r = mid
}
}

return undefined
}

使用

function main() {
const s = [2, 3, 5, 7, 11, 13, 17]
const t = 11

console.log('[]:', binarySearch(s, t))
}

main()