1
resposta

Algoritmo de Bubble Sort

Boa noite pessoal, fiz um algoritmo de bubble sort e gostaria de compartilhar:

const livros = [
    {
        nome: "JavaScript",
        preco: 25
    }, 
    {
        nome: "PHP",
        preco: 15
    }, 
    {
        nome: "Java",
        preco: 30
    }, 
    {
        nome: "Elixir",
        preco: 50
    }, 
    {
        nome: "Go",
        preco: 45
    }, 
    {
        nome: "Python",
        preco: 20
    }
];

function bubbleSort(lista) {
    let copia;
    let troca;
    do {
        troca = 0;
        for (let i = 0; i < lista.length - 1; i++) {
            if (lista[i].preco > lista[i + 1].preco) {
                copia = lista[i];
                lista[i] = lista [i + 1];
                lista[i + 1] = copia;
                troca = 1;
            }
        }
    } while (troca)
    console.log(lista);
}

bubbleSort(livros);         // chamada da função passando a array livros como argumento

Esse algoritmo irá retornar a array de objetos livros ordenada.

Neste caso usei duas variáveis para fazer o processo uma copia que recebe uma cópia para salvar o dado que será trocado, uma analogia que eu gosto de pensar é: você tem dois baldes cheios, um de pedras e um com areia, e você (por algum motivo maluco que não importa para a analogia) precisa trocar esses conteúdos de um balde pra outro, você não vai jogar as pedras ou a areia no chão para passar o conteúdo de um balde para o outro e depois recolher o conteúdo do chão, então você precisa de um TERCEIRO balde, que é a variável copia, então fazemos o seguinte:


  1. Passamos o conteúdo do balde de pedras para o balde copia vazio;
  2. Passamos o conteúdo do balde de areia para o balde vazio que continha as pedras;
  3. Passamos as pedras no balde copia para o balde vazio que continha areia;
  4. Trocamos os dados de lugar sem perdê-los.

A outra variável chamada troca serve como estrutura de controle para o loop do... while, sempre que houver uma troca, ela é mudada para 1 para que o loop aconteça novamente e ela é mudada para 0 antes do próximo loop for, sendo assim, caso nenhuma troca de valores aconteça, o loop acaba e a lista estará ordenada.

Obs.: O ponto de parada é definido como i < lista.length - 1 pois, caso fôssemos até o final da array compararíamos o último valor com um valor i + 1 que não existe na array, podendo acarretar problemas no código.

Obs. 2: Podemos realizar este mesmo procedimento com dois loops for aninhados, mas esta forma de fazer o algoritmo é mais ineficiente, pois mesmo que a lista já esteja ordenada, o loop será realizado até a condição de parada, ou seja, em um vetor de 6 elementos (como é o caso) ele irá percorrer o array 30 vezes.

                        //6
for (let i = 0; i < lista.length; i++) {
                                //5
        for (let j = 0; j < lista.length - 1; j++) {
        // código
        }
}
1 resposta

Olá Marcos, tudo bem?

Peço desculpa pela demora.

Parabéns pelo algoritmo de Bubble Sort! Ele é uma ótima forma de ordenar uma array de objetos de acordo com um valor específico, como você fez com o preço dos livros. A sua explicação sobre a analogia dos baldes foi ótima e ajuda a entender melhor como funciona o processo de troca de valores.

Além disso, a sua observação sobre o ponto de parada do loop for é muito importante para evitar problemas no código. E a comparação com a forma de fazer o algoritmo com dois loops for aninhados também foi muito útil para entender a eficiência do seu código.

Continue assim, compartilhando seus conhecimentos e aprendendo cada vez mais! Grande abraço e bons estudos!