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

  • 相关阅读:
    生成更大的陆地 Making A Large Island
    HDU 3342 Legal or Not【拓扑排序】
    POJ 2367 Genealogical tree【拓扑排序】
    CodeForces Round #290 Div.2
    HDU 1010 Tempter of the Bone【DFS】
    HDU 1312 Red and Black【DFS】
    POJ 1664 放苹果【DFS】
    HDU 1587 Flowers【贪心】
    Codeforces Round #289 Div 2
    HDU 1241 Oil Deposits【DFS】
  • 原文地址:https://www.cnblogs.com/yourstars/p/14360665.html
Copyright © 2011-2022 走看看