1.什么时候可以运用二分查找
- 有序的数组
2.二分查找有什么好处
- 效率较高
- 时间复杂度可以表示“O(h)=O(log2n)”
3.分析
let arr = [1,2,3,4,5], num = 4
- 首先我们有一个有序数组arr,和一个要查找的值num
while
let arr = [1,2,3,4,5], num = 4
function search(arr,num){
let left = 0 , right = arr.length
while(left<=right){
// 每次进入while重新计算mid
let mid = Math.floor((left+right)/2)
if(arr[mid]===num){
return mid
}
// [1, 2, 3, 4, 5] 4
// 假如arr[mid] < num
// 要求的值在右侧
// 需要将right结束点设置为中间点-1
if(arr[mid]>num){
right = mid - 1
}else{
//要求的值在左侧
left = mid + 1
}
}
//未找到时返回-1
return -1
}
- left:起始点定义为0
- right:介绍点定义为数组的长度
- mid:中间数
递归
let arr = [1,2,3,4,5], num = 4
let arr = [1,2,3,4,5], num = 4
function search(arr,num,left=0,right=arr.length-1){
let mid = Math.floor((left+right)/2)
if(left>right){
return -1
}
if(arr[mid]===num){
return mid
}
// 在右侧
if(arr[mid]>num){
right = mid -1
return search(arr,num,left,right)
}else{
left = mid + 1
return search(arr,num,left,right)
}
}