# 二分查找
又称为折半查找,是一种效率较高的查找方法。
要求
- 必须采用顺序存储结构
- 有序排列
时间复杂度 O(log2n)
思想: 首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
代码:
function bs(nums,n){
var min=0;
var max=nums.length-1;
while(min<=max){
var mid = min + (max-min>>1); // 减法防止溢出,括号因为移位优先级低
if(nums[mid]>n){
max=mid-1;
}else if(nums[mid]<n){
min=mid+1;
}else return mid;
}
return -1;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
← 查找算法