时间复杂度(log n)
算法思想
- 注意:仅在有序列表中
- 每一次都比较 目标值 与 中间值(mid) 的大小,临界点设为 low high
- 目标值 > 中间值, low = mid + 1,加一的原因是因为mid值已经被比较过了
- 目标值 < 中间值, high = mid - 1,同理,加一的原因是因为mid值已经被比较过了
- 目标值 = 中间值,目标值已找到,输出即可
(JS)代码示例
function funNumber(arr,target){
let low = 0, high = arr.length - 1, mid = parseInt((low + high) / 2);
for(let i = 0; i < arr.length; i++){
if(target > arr[mid]) low = mid + 1;
else if(target < arr[mid]) high = mid - 1;
else return mid;//此时mid为目标值在数组中的下标
mid = parseInt((low + high) / 2);
}
return null;
}
let arr = [1,2,3,4,5,6,7,8,9,10];
funNumber(arr,3);