二分搜寻
原文链接:https://note.noxussj.top/?source=sifo
什么是二分搜寻?
二分搜寻是一种比拟高效的搜索算法,但前提必须是有序数组。次要步骤如下:
- 从数组的两头元素开始,如果两头元素正好是目标值,则搜寻完结
- 如果目标值大于或者小于两头元素,则在大于或者小于两头元素的那一半数组中持续二分搜寻
根底案例
- 工夫复杂度:O (logn)
- 空间复杂度:O (1)
Array.prototype.binarySearch = function (target) { let low = 0 let high = this.length - 1 while (low <= high) { const mid = Math.floor((low + high) / 2) const element = this[mid] if (element < target) { low = mid + 1 } else if (element > target) { high = mid - 1 } else { return mid } } return -1 } const res = [1, 2, 3, 4, 5].binarySearch(1) // 0
因为每次比拟都使搜寻范畴放大一半,所以工夫复杂度是 O (logn)。而空间复杂度是 O (1),因为没有应用线性增长的变量。
原文链接:https://note.noxussj.top/?source=sifo