二分搜索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 次就能计算出结果




原文地址:https://www.cnblogs.com/hueychan/p/10575917.html