二分查找的前提是数组是有序的。可以存在重复元素,如[3,5,7,7,9]。
算法思路
- 从数组的中间元素开始,如果中间元素正好是目标值,则结束搜索;
- 如果目标值大于或小于中间元素,则在大于或小于中间元素的那一半数组中搜素;
- 重复2,3步,若未找到,return -1。
时间复杂度
时间复杂度O(logN)
每次使搜索范围缩小一半/劈成一半的问题,Time = O(logN)。
Coding
Array.prototype.binarySearch = function(item){
let low = 0;
let high = this.length - 1; //要搜素的最小、最大下标
while(low <= high){
const mid = Math