二分查找是对一组有序数据进行的查找,必须是有序的。

    • 定义出左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。
      1. function binary_search(arr, search){
      2. let L = arr[0], R = arr[arr.length - 1], guess;
      3. // 满足 L<=R 进行循环,超出后跳出循环
      4. while(L<=R){
      5. guess = Math.floor((L+R)/2);
      6. if(arr[guess] === search){
      7. return guess;
      8. } else if(arr[guess] < search){
      9. L = guess+1
      10. } else {
      11. R = guess -1
      12. }
      13. }
      14. // 查找不到
      15. return -1;
      16. }
      17. console.log(binary_search([1, 3, 45, 67, 89, 100], 2));