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

Ainda não consegui compreender o uso do analise--;

Boa tarde, tudo certo com vocês?

Não consegui compreender como que o código "analise--;" consegue sair do loop do while... E deixei esse trecho comentado para testar e funcionou igualmente.

Se a minha var analise tem valor de 0 no while e eu desconto com --, ficaria com -1 em qual escopo? do for onde declarei let analise ou o valor fica guardado dentro do while na variável analise?

listaLivros.js

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;

insertionSort.js

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(arrProdutos);
}

insertionSort(livros);

Funciona perfeitamente sem o trecho analise--;

2 respostas
solução!

Sem o analise-- a saída fica assim (incorreta): [ { titulo: 'PHP', preco: 15 }, { titulo: 'Javascript', preco: 25 }, { titulo: 'Java', preco: 30 }, { titulo: 'Go', preco: 45 }, { titulo: 'Python', preco: 20 }, { titulo: 'Elixir', preco: 50 } ]

Com o analise-- a saída fica assim (correta): [ { titulo: 'PHP', preco: 15 }, { titulo: 'Python', preco: 20 }, { titulo: 'Javascript', preco: 25 }, { titulo: 'Java', preco: 30 }, { titulo: 'Go', preco: 45 }, { titulo: 'Elixir', preco: 50 } ]

Segue transcrição da fala do instrutor: [09:31] "...passamos analise-- para dentro desse while que ele vai analisando e vai voltando." [09:53] "...Isso aqui vai voltar até o momento em que essa condição do while não for mais verdadeira. Quando essa condição deixar de ser verdadeira, quer dizer que já chegamos no lugar da lista, do array, onde o elemento tem que ficar. Então, aí ele vai sair do while."

Então retirar a linha do analise-- vai gerar uma saída errada.

Gabriel, realmente não tinha visto que ficou desordenada a lista.

Para entender melhor a fala da Instrutora que tu colocou, resolvi colocar console.log em cada trecho que tinha a variável analise (como se fosse um debbug mesmo) e a compreensão ficou melhor o mecanismo do for e while lidando com a "analise". Logo, também entendi a necessidade do trecho analise--;

Sempre tenho dificuldade de visualizar mentalmente o mecanismo do for, forEach, While... Mas com console.log me mostrando onde que vão cada dado me ajudou...

Obrigado pela atenção Gabriel.