【发布时间】:2018-02-05 13:21:00
【问题描述】:
我尝试在我的代码示例中使用二进制搜索算法,但它没有按我的预期运行。我不知道为什么。请帮我解释一下
var array = [1, 4, 6, 8, 9, 12, 15, 17, 19, 34, 55, 78, 80];
function binarySearch (array, numberToSearch) {
var firstIndex = 0;
var lastIndex = array.length - 1;
var currentIndex;
var currentElement;
currentIndex = (lastIndex + firstIndex) / 2 | 2;
currentElement = array[currentIndex];
while (firstIndex <= lastIndex) {
if (numberToSearch === currentElement) {
// found
console.log(currentIndex);
return currentIndex;
} else if (numberToSearch < currentElement) {
lastIndex = currentIndex - 1;
currentIndex = (lastIndex + firstIndex) / 2 | 2;
currentElement = array[currentIndex];
} else if (numberToSearch > currentElement) {
firstIndex = currentIndex + 1;
currentIndex = (lastIndex + firstIndex) / 2 | 2;
currentElement = array[currentIndex];
}
}
return -1;
}
binarySearch(array, 12);
我应该打印:5 但什么也没发生
【问题讨论】:
-
我猜,你的意思是二进制搜索而不是二进制排序?
-
我认为您不允许循环使用返回 -1 完全运行。我认为您将迭代解决方案与递归解决方案混为一谈。
-
@82Tuskers 对于无结果条件,我返回 -1。但我认为这不是问题
-
return -1不是唯一的问题,而是while循环只进行一次迭代的原因。 -
@Thijs 好的,我认出了它,我尝试将其删除或将其置于 while 循环之外。但是代码仍然得到相同的结果:什么都没有
标签: javascript arrays algorithm search data-structures