Bubble Algoritmo de classificação em Java: Programa e exemplo de classificação de array

⚡ Resumo Inteligente

Bubble Algoritmo de classificação em Java O algoritmo compara repetidamente elementos adjacentes de um array e os troca de lugar até que a sequência esteja ordenada. Este artigo explica o mecanismo de funcionamento, o pseudocódigo e o código completo. Java Implementação, variante otimizada, análise de complexidade e comparações práticas com outras técnicas de ordenação.

  • 🔄 Princípio fundamental: Compare cada par adjacente e troque de posição quando o valor da esquerda for maior que o da direita, empurrando o elemento de maior valor para o final de cada iteração.
  • 🧮 Estrutura de Passes: Uma matriz de n elementos requer no máximo n-1 passagens, e cada passagem encurta a região não ordenada em uma posição.
  • Java Implementação: Dois laços for aninhados, juntamente com uma variável temporária, realizam a troca, sem exigir alocação adicional de array.
  • Técnica de otimização: Uma flag booleana trocada encerra o loop externo antecipadamente, reduzindo o tempo de execução, na melhor das hipóteses, de quadrático para linear.
  • ⏱️ Perfil de complexidade: O pior caso e o tempo médio são O(n²), o melhor caso é O(n) quando otimizado, e o espaço auxiliar permanece em O(1).
  • ⚖️ Comparação de algoritmos: Quicksort e Heap Sort apresentam melhor desempenho. Bubble Classificar em grandes conjuntos de dados, ainda BubblO e Sort permanece estável.
  • 🎯 Uso pratico: Escolha Bubble Sort para ensino, arrays pequenos ou dados quase ordenados.

Bubble Algoritmo de classificação em Java

O que é a Bubble Classificar?

BubblO eSort é um algoritmo de ordenação simples baseado em comparação, que compara o primeiro elemento do array com o próximo. Se o elemento atual do array for numericamente maior que o próximo, os elementos são trocados. Da mesma forma, o algoritmo percorrerá todos os elementos do array.

O algoritmo recebe esse nome devido à maneira como o maior valor na região não ordenada sobe gradualmente até sua posição final, de forma semelhante a uma bolha subindo à superfície da água. Após a primeira passagem completa, o maior elemento ocupa o último índice. Após a segunda passagem, o segundo maior elemento é fixado em sua posição, e o processo se repete até que o array esteja totalmente ordenado.

Neste artigo, criaremos um Java programa para implementar Bubble Classifique. Verifique a saída do código, que ajudará você a entender a lógica do programa, e depois revise a versão otimizada e a análise de complexidade que se seguem.

Como é que BubblO algoritmo de ordenação funciona?

BubblO algoritmo eSort funciona percorrendo repetidamente o array. Cada passagem vai do primeiro índice até o final da região atualmente não ordenada, comparando os valores vizinhos e trocando-os.ping eles sempre que aparecem na ordem errada. Como o maior valor restante sempre se desloca para a extrema direita da região não ordenada, a região diminui exatamente uma posição após cada passagem.

O processo completo pode ser dividido em quatro etapas repetíveis:

  1. Comparar: Examine o elemento no índice j-1 em relação ao elemento no índice j.
  2. Swap: Se o elemento da esquerda for maior que o elemento da direita, troque os dois valores usando uma variável temporária.
  3. Avançar: Mova-se uma posição para a direita e repita até chegar ao final da região não classificada.
  4. Repetir: Inicie uma nova passagem sobre uma região que tenha um elemento a menos e pare após n-1 passagens ou quando uma passagem não realizar nenhuma troca.

A mesa abaixo tracEste é o array de exemplo {860, 8, 200, 9} usado no programa mais adiante nesta página. Ele mostra exatamente qual valor se estabiliza em sua posição final ao final de cada iteração.

Passar Matriz no início da passagem Comparações realizadas Matriz no final da passagem Elemento bloqueado
1 860, 8, 200, 9 3 8, 200, 9, 860 860
2 8, 200, 9, 860 2 8, 9, 200, 860 200
3 8, 9, 200, 860 1 8, 9, 200, 860 9
4 8, 9, 200, 860 0 8, 9, 200, 860 8

Note que a terceira passagem realiza uma comparação, mas não uma troca. Uma implementação otimizada detecta essa condição e para imediatamente, o que representa a melhoria mais valiosa que você pode aplicar a este algoritmo.

BubblPseudocódigo do algoritmo de ordenação e

Antes de escrever Java Em termos de sintaxe, isso ajuda a expressar a lógica em pseudocódigo independente da linguagem. A versão abaixo inclui o sinalizador de saída antecipada, abrangendo assim o comportamento clássico e o otimizado.

procedure bubbleSort(array A, integer n)
    for i from 0 to n - 2 do
        swapped := false
        for j from 1 to n - i - 1 do
            // compare the adjacent pair
            if A[j - 1] > A[j] then
                swap A[j - 1] and A[j]
                swapped := true
            end if
        end for
        // no swap in a full pass means the array is sorted
        if swapped = false then
            break
        end if
    end for
end procedure

O laço externo controla o número de iterações, e o laço interno controla as comparações dentro de uma única iteração. O limite superior do laço interno é n – i – 1, pois as últimas i posições já contêm seus valores finais.

Java Programa para Implementação Bubble Classificar

O programa a seguir ordena um vetor de inteiros em ordem crescente. Instruções de impressão adicionais foram mantidas dentro dos laços propositalmente, pois a leitura passo a passo seria complexa. tracÉ a maneira mais rápida para um iniciante entender como os swaps se acumulam.

package com.guru99;

public class BubbleSort {

    public static void main(String[] args)
    {
        int arr[] = {860, 8, 200, 9};

        System.out.println("---Array BEFORE Bubble Sort---");

        printArray(arr);

        bubbleSort(arr); //sorting array elements using bubble sort

        System.out.println("---Array AFTER Bubble Sort---");

        printArray(arr);

    }

    static void bubbleSort(int[] array)
    {
        int n = array.length;
        int temp = 0;
        for(int i = 0; i < n; i++) // Looping through the array length
        {   System.out.println("Sort Pass Number " + (i + 1));
            for(int j = 1; j < (n - i); j++)
            {
                System.out.println("Comparing " + array[j - 1] + " and " + array[j]);
                if(array[j - 1] > array[j])
                {
                    //swap elements
                    temp = array[j - 1];
                    array[j - 1] = array[j];
                    array[j] = temp;
                    System.out.println(array[j] + " is greater than " + array[j - 1]);
                    System.out.println("Swapping Elements: New Array After Swap");
                    printArray(array);
                }

            }
        }

    }

    static void printArray(int[] array){

        for(int i = 0; i < array.length; i++)
        {
            System.out.print(array[i] + " ");
        }
        System.out.println();

    }
}

Saída:

---Array BEFORE Bubble Sort---
860 8 200 9
Sort Pass Number 1
Comparing 860 and 8
860 is greater than 8
Swapping Elements: New Array After Swap
8 860 200 9
Comparing 860 and 200
860 is greater than 200
Swapping Elements: New Array After Swap
8 200 860 9
Comparing 860 and 9
860 is greater than 9
Swapping Elements: New Array After Swap
8 200 9 860
Sort Pass Number 2
Comparing 8 and 200
Comparing 200 and 9
200 is greater than 9
Swapping Elements: New Array After Swap
8 9 200 860
Sort Pass Number 3
Comparing 8 and 9
Sort Pass Number 4
---Array AFTER Bubble Sort---
8 9 200 860

Code explicação: O Classificação por bolhas O método recebe o array por referência, portanto, quem o chama vê o resultado ordenado sem nenhum valor de retorno. A variável temperatura mantém um valor durante a troca de três linhas, razão pela qual o algoritmo precisa apenas de O(1) de memória extra. A expressão n – i Na condição do laço interno, garante-se que as posições já ordenadas na cauda nunca sejam revisitadas.

Estratégias Bubble Classificar programa em Java

O programa acima sempre realiza n-1 iterações, mesmo quando o array é ordenado antecipadamente. Adicionar um único parâmetro booleano corrige essa ineficiência. Se uma iteração completa terminar sem nenhuma troca, o array estará garantido como ordenado e o loop externo poderá ser interrompido imediatamente.

package com.guru99;

public class OptimizedBubbleSort {

    public static void main(String[] args) {
        int arr[] = {5, 12, 33, 47, 58};
        bubbleSort(arr);
        System.out.println(java.util.Arrays.toString(arr));
    }

    static void bubbleSort(int[] array) {
        int n = array.length;
        int passes = 0;
        for (int i = 0; i < n - 1; i++) {
            boolean swapped = false;
            for (int j = 1; j < n - i; j++) {
                if (array[j - 1] > array[j]) {
                    int temp = array[j - 1];
                    array[j - 1] = array[j];
                    array[j] = temp;
                    swapped = true;
                }
            }
            passes++;
            // Early exit: the array is already sorted
            if (!swapped) {
                break;
            }
        }
        System.out.println("Passes executed: " + passes);
    }
}

Saída:

Passes executed: 1
[5, 12, 33, 47, 58]

Como o array de entrada já estava ordenado, a versão otimizada terminou após uma única passagem em vez de quatro. Em dados quase ordenados, essa mudança transforma uma carga de trabalho quadrática em uma quase linear, que é o principal motivo. BubblO operador e Sort ainda aparece em código real de tempos em tempos.

Complexidade de tempo e complexidade de espaço de Bubble Classificar

A complexidade descreve como o tempo de execução aumenta à medida que o tamanho da entrada aumenta. Bubble A contagem de comparações na versão não otimizada é fixa em n(n-1)/2, o que a coloca firmemente na classe quadrática.

Cenário Condição de entrada Complexidade de tempo Complexidade do Espaço
Melhor caso Matriz já ordenada, versão otimizada O (n) O (1)
Caso médio Elementos em ordem aleatória O (n²) O (1)
Pior caso Matriz ordenada em ordem inversa O (n²) O (1)

Como cada troca ocorre dentro do array original e apenas uma variável temporária é utilizada, Bubble Sort é um algoritmo in-place com espaço auxiliar O(1). É também uma ordenação estável, o que significa que dois registros que possuem a mesma chave mantêm sua ordem relativa original após a ordenação.

Vantagens e desvantagens de Bubble Classificar

Compreender os dois lados da questão ajuda a decidir quando o algoritmo é uma escolha aceitável e quando deve ser substituído.

Vantagens

  • Simplicidade: A lógica cabe em aproximadamente dez linhas, o que facilita a escrita correta em situações de entrevista.
  • Operação no local: Nenhuma matriz auxiliar é alocada, portanto o uso de memória não aumenta com o tamanho da entrada.
  • Estabilidade: Chaves iguais mantêm sua ordem original, o que é importante ao classificar registros por um campo secundário.
  • Detecção antecipada de saída: O indicador "swipped" identifica um array já ordenado em uma única passagem.

Desvantagens

  • Crescimento quadrático: Ordenar 10,000 elementos requer quase 50 milhões de comparações no pior caso.
  • Excessivo escreve: O algoritmo realiza muito mais trocas do que o Selection Sort, que é custoso em termos de memória e possui operações de escrita lentas.
  • Baixa escalabilidade: Em cargas de trabalho de produção, quase sempre se prefere o Quicksort, o Merge Sort ou o método Arrays.sort integrado.

💡 Dica: Em produção Java código, de preferência Arrays.sort () para primitivos e Collections.sort() para listas. Ambos utilizam algoritmos altamente otimizados, Dual-Pivot Quicksort e TimSort respectivamente, que superam um algoritmo escrito manualmente. Bubble Classificar por ordem de grandeza.

BubblClassificação e versus outras formas de classificação Algorithms

A tabela abaixo compara BubblClassifique com as técnicas de classificação que os iniciantes conhecerão a seguir, para que você possa ver exatamente onde cada uma se destaca.

Algoritmo Melhor Case Caso Médio Pior caso Espaço (Space) Estável
Bubble Classificar O (n) O (n²) O (n²) O (1) Sim
Ordem de Seleção O (n²) O (n²) O (n²) O (1) Não
Ordem de inserção O (n) O (n²) O (n²) O (1) Sim
Ordenação rápida O (n log n) O (n log n) O (n²) O (log n) Não
Classificação de pilha O (n log n) O (n log n) O (n log n) O (1) Não

BubblO e Sort e o Insertion Sort compartilham o mesmo melhor caso linear, mas o Insertion Sort realiza menos trocas em dados parcialmente ordenados. O Selection Sort sempre realiza exatamente n-1 trocas, o que o torna...tracO Quicksort é eficaz quando as operações de escrita são custosas, embora sacrifique a estabilidade. Para qualquer matriz com mais de algumas centenas de elementos, o Quicksort ou o Heap Sort são as escolhas corretas.

Uma vez que você esteja familiarizado com os padrões de percurso em arrays usados ​​aqui, a mesma estrutura de loop aparece em muitos exercícios clássicos, como o Série de Fibonacci em Java e Java programa palíndromo. Revvendo Java matrizes e quanto maior Java tutorial fortalecerá os fundamentos dos quais este algoritmo depende.

Perguntas Frequentes

O nome reflete o movimento dos valores durante cada passagem. O maior elemento restante desloca-se continuamente em direção ao final da matriz, semelhante a uma bolha subindo na água até atingir a superfície.

São necessárias no máximo n-1 passagens, resultando em n(n-1)/2 comparações. Com a otimização de flags trocadas, um array ordenado é finalizado em uma única passagem, pois nenhuma troca ocorre durante essa travessia.

Reverse o operador de comparação dentro do loop interno. Alterar se (array[j-1] > array[j]) para se (array[j-1] < array[j])Todas as outras linhas do programa permanecem inalteradas.

Sim. Substitua o operador "maior que" por comparado a() Para valores do tipo String, ou com uma chamada de Comparator para objetos personalizados. A estrutura do loop circundante e a lógica de troca permanecem idênticas.

Sim. Os assistentes de IA produzem resultados funcionais de forma confiável. BubblO código de ordenação é importante porque o padrão é extremamente comum nos dados de treinamento. Sempre verifique os limites do loop e teste com valores invertidos e duplicados antes de confiar na saída.

Sim. Os entrevistadores ainda o utilizam para testar o raciocínio em loops e a análise de complexidade. Compreender o algoritmo também permite avaliar se o código de ordenação gerado por IA é eficiente, e não apenas funcional.

Resuma esta postagem com: