У меня есть бинарный поиск, и я попытался отследить его, в моем аккаунте он должен вернуть значение как true во второй итерации, в то время как l oop, в console.log выполняется только базовый случай. Понятия не имею, что я делаю здесь не так, хотелось бы несколько указателей
const binarySearch = (sortedArray,value ) =>{
let left =0
let right = sortedArray.length-1
let middle =left+Math.floor((right-left ) /2)
// console.log(`
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// left ==${left}
// right ==${right}
// middle==${middle}
// is value === middle??? ${value === sortedArray[middle]}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// `)
while(left<right){
if(sortedArray[middle] === value){
return middle
}
if(sortedArray[middle] < value){
left = middle+1
}
if(sortedArray[middle] > value){
right = middle-1
}
}
return -1
}
binarySearch([1,2,3,4,5], 4)
edit: я нашел ошибку! По какой-то странной причине я думал, что в то время как l oop будет использовать обновленное среднее значение, но для этого нет никаких оснований, поскольку javascript просто продолжает работать в стеке вызовов, если только я специально не изменю какое-либо значение. Тогда у меня была другая проблема, когда я не учитывал, могло ли значение «влево» или «вправо», похоже, работает сейчас, хотелось бы получить несколько советов по улучшению или совет, спасибо.
const binarySearch = (sortedArray,value ) =>{
let left =0
let right = sortedArray.length-1
while(left<=right){
let middle =left+Math.floor((right-left ) /2)
if(sortedArray[middle] === value){
return middle
}
if(sortedArray[middle] < value){
left = middle+1
}
if(sortedArray[middle] > value){
right = middle-1
}
}
return -1
}
binarySearch([1,2,3,4,5], 1)