二分查找是对一组有序数据进行的查找,必须是有序的。
- 定义出左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));
