zoukankan      html  css  js  c++  java
  • 二分查找算法-Node.js实现

    /**
     * 
     * @param {*} arr 有序数组
     * @param {*} firstNumIndex 第一个值的索引
     * @param {*} lastNumIndex 最后一个值的索引
     * @param {*} target 想要查找的值
     */
    
    function binarySearch(arr, target) {
        var firstNumIndex = 0;
        var lastNumIndex = arr.length - 1;
    
        while (firstNumIndex <= lastNumIndex) {
            var mid = Math.floor((lastNumIndex + firstNumIndex) / 2); // Math.floor, 向下取整,一种取中间数的方法
            //var mid = parseInt((lastNumIndex + firstNumIndex) / 2); // 当值为数字时,parseInt与Math.floor得到的结果是一样的
            if (target == arr[mid]) {
                console.log(mid); // 0
                return;
            }
            if (target > arr[mid]) {
                firstNumIndex = mid + 1;
            } else if (target < arr[mid]) {
                lastNumIndex = mid - 1;
            }
        }
    }
    
    var arr = [-1, 3, 5, 7, 89, 101]
    var target = -1;
    
    binarySearch(arr, target)
      
    

      

     步骤分析

    1、二分查找法,其实就是通过三个数来查找。

    2、选一个开始值,选一个末尾值,再计算出中间值。

    3、将中间值与你想查找的值做比较:

    如果目标值大于中间值,那么以中间值的下一位作为新的开始值,重新计算中间值;

    如果目标值小于中间值,那么以中间值的前一位作为新的末尾值,重新计算中间值;

    如果目标值等于中间值,那么得到了我们想要的结果。

     

    用二分法要注意的点:

    1、数组必须是有序数组(从大到小或者从小到大)

    2、要确认有序数组中是否存在相同的值,若有,则根据自己的需求做相应处理。

  • 相关阅读:
    Python生成器表达式
    Python列表解析
    Python迭代器(Iterator)
    Python set 集合
    python eval 函数妙用
    Python字典 (dict)
    Python序列之元组 (tuple)
    Python序列之列表 (list)
    递归和反射
    常用标准库
  • 原文地址:https://www.cnblogs.com/yourstars/p/14360665.html
Copyright © 2011-2022 走看看