二分查找是对一组有序数据进行的查找,必须是有序的。
- 定义出左L、右R变量,和guess变量
- 进行while循环遍历,循环需要满足的条件 L <= R ,只要是 L大于R 就终止循环。
- guess变量先取Math.floor( (L + R)/2 ), 左右值的中间位置。
- 如果中间值等于 要查找的值,直接返回guess
- 如果中间的值小于搜索值 arr[guess] < search, 则将L进行移动,重新赋值为guess+1[因为是向下取整,所以要加1]。
- 最后一种情况,arr[guess] > seach , 中间值大于搜索值,就移动右侧的R。
function binary_search(arr, search){
let L = arr[0], R = arr[arr.length - 1], guess;
// 满足 L<=R 进行循环,超出后跳出循环
while(L<=R){
guess = Math.floor((L+R)/2);
if(arr[guess] === search){
return guess;
} else if(arr[guess] < search){
L = guess+1
} else {
R = guess -1
}
}
// 查找不到
return -1;
}
console.log(binary_search([1, 3, 45, 67, 89, 100], 2));