这是我关于堆栈溢出的第一个问题,所以请耐心等待。 我编写了这个二元搜索函数,但由于某种原因它挂起 - 我假设是因为无限循环。任何人都可以找到我的代码的错误吗?
let binarySearch = (array, value) => {
let target = value,
start = 0,
end = array.length - 1,
middle = Math.floor( (end + start)/2 )
while (start <= end){
if ( array[middle] === target ){
return true
}else if (array[middle] < target){
start = middle + 1
}else if (array[middle] > target){
end = middle - 1
}
}
return false
}
最佳答案
最明显的错误是,您需要将 middle
计算为循环内部的第一个操作,而不是外部。
如果没有这种更改,您总是会在第一次调用函数时检查哪个元素是“中间”的,并且永远不会对搜索空间进行分区。
修复到位后,我的测试表明代码可以按要求工作,尽管按照注释中的建议,您应该返回找到的元素的索引,而不仅仅是一个表示是否找到该元素的标志。
关于javascript - 我在 JavaScript 中使用二分搜索实现的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44890165/