zoukankan      html  css  js  c++  java
  • 二分搜索javascript实现 huey

    看书看到了关于二分搜索的内容,自己尝试着用javascript写了一段二分搜索的算法,

    代码如下:

      /*二分搜索 index刚开始默认为0*/
      function getNumIndexOfArray(array, value, index) {
        if (array.length > 0 && array[array.length - 1] >= value) {
          if (array.length > 1) {
            var idx = parseInt(array.length / 2);
            if (array[idx] > value) {
              //表明搜索的数字在前一半里面
              var newarray = array.splice(0, idx);         
              return getNumIndexOfArray(newarray, value, index);
            } else if (array[idx] < value) {
              //表明搜索的数字在后一半里面
              var newarray = array.splice(idx,array.length - idx);
              return getNumIndexOfArray(newarray, value, idx + index);
            } else {
              return idx + index;
            }
          } else {
            if (array[0] == value) {
              return index;
            }
          }
        }
        return -1; //代表输入的有误
      }
    

    自己用整数测试了一下没问题

      var lst = new Array(155);
      function setVal1() {
        for (i = 0; i < lst.length; i++) {
          lst[i] = i * 2 + 1;
        }
      }
      function setVal2() {
        for (i = 0; i < lst.length; i++) {
          lst[i] = i + 1;
        }
      }

    测试如下:

    > setVal1()
    undefined
    > getNumIndexOfArray(lst,66,0)
    -1

    > setVal1()
    undefined
    > getNumIndexOfArray(lst,111,0)
    55

    > setVal2()
    undefined
    > getNumIndexOfArray(lst,66,0)
    65

    二分搜索在实际应用中还是挺重要的,程序不用去遍历匹配,而只用log2 n 次就能计算出结果




  • 相关阅读:
    BZOJ 1191 HNOI2006 超级英雄hero
    BZOJ 2442 Usaco2011 Open 修建草坪
    BZOJ 1812 IOI 2005 riv
    OJ 1159 holiday
    BZOJ 1491 NOI 2007 社交网络
    NOIP2014 D1 T3
    BZOJ 2423 HAOI 2010 最长公共子序列
    LCA模板
    NOIP 2015 D1T2信息传递
    数据结构
  • 原文地址:https://www.cnblogs.com/hueychan/p/10575917.html
Copyright © 2011-2022 走看看