二分搜索 binary search - lzxassj/Some-things GitHub Wiki

非递归

/**
 * 返回-1代表target不在nums中,大于-1代表target在nums中的索引值
 * @param nums 入参数组
 * @param target 待查找数字
 * @param low 开始位置
 * @param high 结束位置
 * @return 当前数组索引或-1
 */
var binarySearch = function(nums, target, low, high) {
  var _low = low === void 0 ? 0 : low;
  var _high = high === void 0 ? nums.length -1 : 0;
  
  while(_low < _high) {
    
    var middle = _low + Math.floor((_high - _low) / 2);
    if(nums[middle] === target) {
      return middle;
    }
    
    if(target < nums[middle]) {
      _high = middle - 1;
    } else {
      _low = middle + 1;
    }
  }
  return -1;
}

var nums = [1,4324,24,42,43,21,27,100,88,85,434];
console.log(binarySearch(nums, 88));

// 输出8