二进制搜索总是 return -`
Binary search always return -`
我正在尝试使用 JS 实现二进制搜索,但它会进入无限循环。它没有返回位置。我不确定我做错了什么。
代码:
function binarySearch(value, list) {
let initial = 0;
let end = list.length - 1;
let found = false;
let middle;
let position = -1;
while (found != true && initial <= end){
middle = Math.round(initial + end) / 2;
if (value == list[middle]) {
found = true;
position = middle;
} else if (value < list[middle]) end = middle - 1;
else initial = middle + 1;
}
console.log(position) ;
}
binarySearch(3, [1, 3, 5, 6]);
下面的代码总是正确的,因此是一个无限循环。
while (found != true && initial <= end)
middle = Math.round(initial + end) / 2;
将代码放在大括号内
function binarySearch(value, list) {
let initial = 0;
let end = list.length - 1;
let found = false;
let middle;
let position = -1;
while (found != true && initial <= end){
middle = Math.round((initial + end) / 2);
if (value == list[middle]) {
found = true;
position = middle;
} else if (value < list[middle]) end = middle - 1;
else initial = middle + 1;
}
return position;i
}
您有 middle = Math.round(initial + end) / 2;
,但结果并不总是整数。
将其更改为 middle = Math.round((initial + end) / 2);
以始终获取整数。
我正在尝试使用 JS 实现二进制搜索,但它会进入无限循环。它没有返回位置。我不确定我做错了什么。
代码:
function binarySearch(value, list) {
let initial = 0;
let end = list.length - 1;
let found = false;
let middle;
let position = -1;
while (found != true && initial <= end){
middle = Math.round(initial + end) / 2;
if (value == list[middle]) {
found = true;
position = middle;
} else if (value < list[middle]) end = middle - 1;
else initial = middle + 1;
}
console.log(position) ;
}
binarySearch(3, [1, 3, 5, 6]);
下面的代码总是正确的,因此是一个无限循环。
while (found != true && initial <= end)
middle = Math.round(initial + end) / 2;
将代码放在大括号内
function binarySearch(value, list) {
let initial = 0;
let end = list.length - 1;
let found = false;
let middle;
let position = -1;
while (found != true && initial <= end){
middle = Math.round((initial + end) / 2);
if (value == list[middle]) {
found = true;
position = middle;
} else if (value < list[middle]) end = middle - 1;
else initial = middle + 1;
}
return position;i
}
您有 middle = Math.round(initial + end) / 2;
,但结果并不总是整数。
将其更改为 middle = Math.round((initial + end) / 2);
以始终获取整数。