1
resposta

Algorítimo não executa corretamente

Olá, repliquei exatamente o que a instrutora passou porém na saída do console, aparece o array original

`const livros = require('./lista-livros')

function insertionSort(lista) { for (let atual = 1; atual < lista.lenght; atual++) { let analise = atual; while (lista[analise].preco < lista[analise - 1].preco) { let itemAnalise = lista[analise]; let itemAnterior = lista[analise - 1];

        lista[analise] = itemAnterior
        lista[analise - 1] = itemAnalise

        analise--
    }
}
console.log(lista)

}

insertionSort(livros)

E esse seria a lista de livros 

const precosLivros = [ { titulo: "Javascript", preco: 25 }, { titulo: "PHP", preco: 15 }, { titulo: "Java", preco: 30 }, { titulo: "Elixir", preco: 50 }, { titulo: "Go", preco: 45 }, { titulo: "Python", preco: 20 } ];

module.exports = precosLivros; `

1 resposta

Olá, Victor!

Tem dois pontos no seu código que precisamos revisar.

Um deles é provavelmente o erro de digitação mais comum do mundo da programação! No seu código está (let atual = 1; atual < lista.lenght; atual++) e o correto é lista.length (o t e o h estão trocados). Acho que todo mundo que precisa escrever essa palavra já fez isso (eu fiz bastante).

O outro é no while. Este laço de repetição está inserido dentro de outro laço, o for, que começa no índice 0. Além disso, o primeiro elemento a ser analisado é o elemento que está no índice 0 , e se tentarmos fazer a comparação while (lista[analise].preco < lista[analise - 1].preco) o JavaScript vai tentar comparar o índice 0 com o índice -1, que não existe no array.

Assim, temos que incluir a condição analise > 0, como fizemos no vídeo: while (analise > 0 && lista[analise].preco < lista[analise - 1].preco).

Faça o teste e veja se o retorno vem correto.

Bons estudos! ;)