• 二分查找算法-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、要确认有序数组中是否存在相同的值,若有,则根据自己的需求做相应处理。

  • 相关阅读:
    ios webview调试
    iOS与网页JS交互,看我就够了
    iOS开发工具-网络封包分析工具Charles
    使用 Charles 抓取 App 网络请求
    用css解决table文字溢出控制td显示字数
    Docker容器学习与分享03
    Docker容器学习与分享02
    Docker容器学习与分享01
    写在重新更新之前
    Kali学习笔记30:身份认证与命令执行漏洞
  • 原文地址:https://www.cnblogs.com/yourstars/p/14360665.html
Copyright © 2020-2023  润新知