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

O algoritmo 'selection sort' não está funcionando

Boa tarde, Meus códigos de selection sort não têm funcionado, apesar de, aparentemente, estarem escritos corretamente. Revi inúmeras vezes o original e criei novos seguindo o que foi mostrado nas aulas, mas não consegui entender o porquê deles não operarem como esperado. Também revisei esses novos arquivos. Não foi apontado nenhum erro no Terminal, o que me fez pensar que poderia ser algum problema de sintaxe, que também não encontrei. Seguem os códigos:

ListaDeLivrosProg.js - Lista de livros copiado da aula:

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;

FuncaoMenorValor.js - função de menor valor:

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

function Menor_Valor(arrProdutos, index_inicial){
    let mais_barato = index_inicial;

    for( let index_atual = index_inicial; index_atual < arrProdutos.length; index_atual + 1){
        if(arrProdutos[index_atual].preco < arrProdutos[mais_barato].preco){
            mais_barato = index_atual;
        }
    }
    return mais_barato;
}

module.exports = Menor_Valor;

OrdenacaoPorComparacao.js - Selection Sort:

const livros = require('./ListaDeLivrosProg');
const Menor_Valor = require('./FuncaoMenorValor');



for( let index_atual = 0; index_atual < livros.length; index_atual++){

    let lesserValue = Menor_Valor(livros, index_atual);

    let livroAtual = livros[index_atual];

    let livroMenorPreco = livros[lesserValue];

    livros[index_atual] = livroMenorPreco;
    livros[lesserValue] = livroAtual;
}

console.log(livros);

Mais uma informação: quando ponho os códigos para rodar, espero uns 2 ou 3 segundos e pressiono "Ctrl+C", por receio de estar em um loop infinito, já que nenhum resultado é mostrado. Ao executar o código da Juliana, a resposta aparece imediatamente, o que reforça a ideia de um problema de lógica na construção do meu código.

Mais outra: houve alguns momentos, entre uma revisão e outra, em que a reposta era simplesmente um par de chaves - {}.

2 respostas
solução!

Fiz novamente esse código, com algumas alterações de nomes de variáveis, em um novo arquivo. Desta vez coloquei o código de função de menor valor no mesmo espaço do de ordenação por comparação. Funcionou. Utilizei outras listas de objetos de outras pastas e não tive problema.

Acredito que o problema do tópico esteja relacionado à função 'require()' e que, por qualquer razão, a função de menor valor não era carregada para o arquivo com o código de 'selection sort'.

Eis o "novo" código:

const Livros = require('./ListaDeLivrosProg');

function MenorValue(arrProduto, indexinicial){
    let custo_mais_baixo = indexinicial;

    for(let indexatual = indexinicial; indexatual < arrProduto.length; indexatual++){

        if(arrProduto[indexatual].preco < arrProduto[custo_mais_baixo].preco){

            custo_mais_baixo = indexatual;
        }
    }
    return custo_mais_baixo;
}

for(let atual = 0; atual < Livros.length - 1; atual++){

    let menor = MenorValue(Livros, atual);

    let LivroAtual = Livros[atual];

    console.log('Posição atual: ', atual);
    console.log('Livro atual: ', Livros[atual]);

    let LivroMenorPreco = Livros[menor];

    console.log('Livro de menor custo: ', Livros[menor]);

    Livros[atual] = LivroMenorPreco;
    Livros[menor] = LivroAtual;
}

console.log(Livros);

Olá Estêvão, tudo bem?

Desde já peço desculpa pela demora para responder o seu tópico.

Fico feliz que tenha conseguido solucionar o seu problema, e fico mais ainda por não desanimar em continuar a atividade mesmo com esse desafio. Continue assim que eu sei que você irá longe.

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

Abraços e bons estudos!