Antes de ver a aula, eu me entreti com esse negocio de adivinhar números, então fiz um código que pegava um numero e ia tentando acertar dividindo a lista, o código ficou assim:
let rangeMin = 0;
let rangeMax = 1000000000;
const numero = 468108;
let chute = Math.floor((rangeMax + rangeMin) / 2);
let tentativas = 1
console.time('realizado em')
while (chute !== numero) {
tentativas++
numero < chute ? rangeMax = chute : rangeMin = chute
chute = Math.floor((rangeMax + rangeMin) / 2)
console.log(`Seu número certamente está entre ${rangeMin} e ${rangeMax}`)
}
console.log('Seu número certamente é', chute, 'adivinhado em', tentativas, 'tentativas')
console.timeEnd('realizado em')
Então adaptei esse código para as listas, e ficou assim:
const listaLivros = require('./aula4/arrayOrdenado')
function busca(array, de, ate, valorBuscado) {
let meio = Math.floor((ate + de) / 2);
let atual = array[meio]
while (atual.preco !== valorBuscado) {
valorBuscado < atual.preco ? ate = meio : de = meio
meio = Math.floor((ate + de) / 2)
atual = array[meio]
if (de + 1 == ate && ate !== 1 || ate == 0) {
meio = -1
break
}
}
return meio
}
console.log(busca(listaLivros, 0, listaLivros.length, 0))
Tive que pensar um pouco sobre como iria fazer para retornar -1 caso o valor inserido não existisse na minha lista, mas no fim acho que consegui