1
resposta

Fiz de outra maneira

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

1 resposta

Olá Kauan, tudo bem?

Peço desculpa pela demora para lhe responder.

Agradeço por compartilhar um pouco do seu conhecimento aqui no fórum!

Adorei essa outra maneira que você aplicou para resolver o problema, utilizando o seu conhecimento de um desafio passado você fez adições interessantes em sua atividade. Espero que continue assim, sei que irá se tornar um bom profissional.

Caso durante os seus estudos você tenha dúvidas ou problemas, recorra ao fórum, estamos aqui para ajudá-lo.

Abraços e bons estudos!