Я пытаюсь выполнить бинарный вызов, и он требует установки промежуточной точки между началом и концом массива.
Это код:
function binary (val, nums) {
var start = nums[0];
var end = nums.length -1;
var found = false;
var mid = Math.floor((start + end)/2);
var position = -1;
while(!found && start <= end) {
if (nums[mid] === val) {
found = true;
position = mid;
}
else if (nums[mid] > val) {
end = mid -1;
}
else {
start = mid + 1;
}
}
return position;
}
console.log(binarySearch(12, [1,2,3,4,5,6,7,12]))
Консоль ничего не возвращает, но функция не останавливается. Однако, если я объявляю var mid за пределами l oop, а затем устанавливаю значение в l oop примерно так:
var mid;
while(!found && start <= end) {
mid = Math.floor((start+end)/2)
if (nums[mid] === val) {
found = true;
position = mid;
}
else if (nums[mid] > val) {
end = mid -1;
}
else {
start = mid + 1;
}
}
Возвращается правильное значение. Почему это?