二进制搜索实现不使用Javascript

时间:2017-08-23 15:17:56

标签: javascript

我正在学习算法,因此我尝试将二进制搜索的python实现转换为Javascript,但这不起作用。我无法解决这个问题。



var search = function(array, key) {
  let begin = 0;
  let end = array.length - 1;
  while (begin <= end) {
    var mid = (begin + end) / 2;
    if (key == array[mid]) {
      return mid;
      break;
    } else if (key > array[mid]) {
      begin = mid + 1;
    } else if (key < array[mid]) {
      end = mid - 1;
    }
    return null
  }
}
var arr = [9, 56, 89, 333, 143, 543, 64, 332, 23];
var info = arr.sort((arr, b) => {
  return arr - b
});
console.log(search(info, 9));

//Output is always null
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分:1)

程序中的一个微妙错误。

首先,return null应该在while之外,现在对于主要部分(begin + end) / 2,如果(begin + end)是奇数,除以2会返回一个浮点数而不是一个整数索引。

所以你必须使用像parseInt()

这样的var mid = parseInt((begin + end) / 2);

http://jsbin.com/vewuculavo/1/edit?js,console

答案 1 :(得分:0)

我纠正了一点:

var search = function(array, key) {
  let begin = 0;
  let end = array.length - 1;
  while (begin <= end) {
    var mid = Math.floor((begin + end) / 2);
    if (key == array[mid]) {
      return array[mid];
    } else if (key > array[mid]) {
      begin = mid + 1;
    } else if (key < array[mid]) {
      end = mid - 1;
    }
  }
  return null
}
var arr = [9, 56, 89, 333, 143, 543, 64, 332, 23];
var info = arr.sort((arr, b) => {
  return arr - b
});
console.log(info);
console.log(search(info, 9));

答案 2 :(得分:0)

除了似乎错位的return null之外,我还看到另一个问题:

如果你的数组的长度是偶数,(即:8)

begin = 0, end = 8 - 1 = 7, => mid = (begin + end) / 2 = 7 / 2 = 3.5

JavaScript将返回:

array[mid] = array[3.5] = undefined

答案 3 :(得分:-1)

问题是你在循环中返回null。将它移到循环外

var search = function(array, key) {
 let begin = 0;
 let end = array.length - 1;
 while (begin <= end) {
   var mid = Math.floor((begin + end) / 2);
   if (key == array[mid]) {
     return mid;
   } else if (key > array[mid]) {
     begin = mid + 1;
   } else if (key < array[mid]) {
     end = mid - 1;
   }
 }
 return null;   
}