Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Meu código não retorna a ordenação correta de preços

Segui o passo a passo da professora, revisei meu código inúmeras vezes. Testei as resoluções do fórum mas ainda não apresenta a ordenação correta. Segue código e saída:

const livros = require('./listaLivros');

function insertionSort(lista) {

 for (let atual = 0; atual < lista.lenght; atual++) {
  let analise = atual;
  while (analise > 0 && 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);

Aqui a saída do código:

[Running] node "d:\Fábio Maia\Documentos\Alura\2324-algoritmos-js-aula-1\2324-algoritmos-js-aula-1\insertionSort.js"
[
  { titulo: 'JavaScript', preco: 25 },
  { titulo: 'PHP', preco: 15 },
  { titulo: 'Java', preco: 30 },
  { titulo: 'Elixir', preco: 50 },
  { titulo: 'Go', preco: 45 },
  { titulo: 'Python', preco: 20 }
]

[Done] exited with code=0 in 0.191 seconds

Podem me ajudar a ver o que não estou vendo?

2 respostas
solução!

Olá, Fábio!

Pelo código que você compartilhou, identifiquei um pequeno erro de digitação na linha 5: em vez de lenght, deve ser length. Esse erro está fazendo com que o loop não seja executado corretamente, resultando em uma saída desordenada.

Além disso, notei que você está usando analise como índice para acessar os elementos da lista, mas está comparando com analise - 1. No entanto, como você está usando o while para percorrer a lista da direita para a esquerda, o correto seria comparar analise com analise + 1.

Aqui está o código corrigido:

const livros = require('./listaLivros');

function insertionSort(lista) {
  for (let atual = 0; atual < lista.length; atual++) {
    let analise = atual;
    while (analise > 0 && 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);

Com essas correções, o código deve retornar a lista de livros ordenada corretamente pelo preço.

Espero ter ajudado e bons estudos!

Muito obrigado! Resolveu!