2
respostas

[Dúvida] A ordem está errada

listalivros.js :

const livros = [{
    titulo : "javascript",preço : 25, 
},
{
    titulo : "PHP",preço : 50, 
},
{
    titulo : "Python",preço : 15, 
},
{
    titulo : "Cor-of-destructor",preço : 400, 
},
{
    titulo : "javascript-part2",preço : 30, 
},
{
    titulo : "Go",preço : 30, 
}
]
module.exports = livros

menorvalor.js :

const livros = require("./listalivros");
function menorvalor(arrProdutos, posiçãoinicial) {
  let maisbarato = posiçãoinicial;
  for (let índice = 0; índice < arrProdutos.length; índice++) {
    if (arrProdutos[índice].preço < arrProdutos[maisbarato].preço) {
      maisbarato = índice;
    }
  }
  return maisbarato;
}


module.exports = menorvalor

selectionsort.js :

const livros = require("./listalivros");
const menorvalor = require("./menorvalor");

for (let índice = 0; índice < livros.length; índice++){
    
    let menor = menorvalor(livros, índice);

    let livroatual = livros[índice];
    let livromenorpreço = livros[menor];


    livros[índice] = livromenorpreço
    livros[menor] = livroatual
   
    
}

for (let i = 0; i < livros.length; i++) {
    console.log("Título:", livros[i].titulo);
    console.log("Preço:", livros[i].preço);
    console.log("--------------------");
  }

os resultados exibidos estão fora de ordem, poderia me ajudar por favor?

2 respostas

Cara o problema me parece estar na lógica do algoritmo de ordenação Selection Sort. Parece que você está trocando os livros de lugar, mas não está verificando se a troca é realmente necessária. Aqui está uma correção rapidinha para o seu código selectionsort.js:

const livros = require("./listalivros");
const menorvalor = require("./menorvalor");

for (let índice = 0; índice < livros.length; índice++) {
  let menor = menorvalor(livros, índice);

  if (índice !== menor) {
    // Verifica se a troca é necessária
    let livroatual = livros[índice];
    let livromenorpreço = livros[menor];

    livros[índice] = livromenorpreço;
    livros[menor] = livroatual;
  }
}

for (let i = 0; i < livros.length; i++) {
  console.log("Título:", livros[i].titulo);
  console.log("Preço:", livros[i].preço);
  console.log("--------------------");
}

Coloquei uma verificação para garantir que a troca só ocorra se o índice do livro atual não for igual ao índice do livro com menor preço. Isso deve corrigir a ordem dos resultados exibidos.

Problema de ordenação continua conforme a imagem abaixo:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade