Visão geral
A classificação de bolhas é um algoritmo de classificação simples. Ele visita repetidamente a sequência a ser classificada, compara dois elementos por vez e os troca se estiverem incorretos. O trabalho de visitar a sequência é repetido até que a sequência tenha sido classificada. A origem desse algoritmo é porque quanto menor o elemento "flutua" lentamente para o início da sequência via troca.
Para simplificar, é:
A classificação de bolhas é mais do que caracteres maiores que afundam atrás da matriz (pode ser entendida como abaixo) e os caracteres menores flutuam na frente (acima).
Diagrama de interpretação intuitiva:
etapa
Compare elementos adjacentes. Se o primeiro for maior que o segundo, troque -os pelos dois.
Faça o mesmo trabalho para cada par de elementos adjacentes, começando do primeiro par até o último par no final. Neste ponto, o último elemento deve ser o maior número.
Repita as etapas acima para todos os elementos, exceto o último.
Continue repetindo as etapas acima para cada vez menos elementos a cada vez, até que não haja pares de números que precisam ser comparados.
Exemplo
Dados brutos:
3 5 2 6 2
A primeira rodada
Comparando 3 e 5, 5 é maior que 3, sem troca 3 5 2 6 2 Continue comparando 5 e 2, 5 é maior que 2, a posição de troca 3 2 5 6 2 Continue comparando 5 e 6, 6 é maior que 5, sem troca 3 2 5 6 2 Continue comparando 6 e 2, 6 é maior que 2, posição de troca 3 2 2 2 66 Pia até o final, ambos 2 Emerge.
Rodada 2
A comparação 3 e 2, 3 é maior que 2, posição de troca 2 3 5 2 6 A comparação 3 e 5, 5 é maior que 3, sem troca 2 3 5 2 6 6 Comparação 5 e 2, 5 é maior que 2, posição de troca 2 3 2 5 6 Não é necessário comparar 5 e 6
A terceira rodada
A comparação 2 e 3, 3 é maior que 2, não há necessidade de trocar 2 3 2 5 6 Comparação 3 e 2, 3 é maior que 2, não há necessidade de comparar a posição de troca 2 2 3 5 6
Rodada 4
Compare 2 e 2 sem troca 2 2 3 5 6
Quatro rodadas terminam
2 2 3 5 6
Implementação de código (Java)
pacote com.coder4j.main.arithmetic.sorting; public class Bubble { / ** * Bubble Sort * * @Param Array * @return * / public static int [] classy (int [] array) {int temp; // O loop da primeira camada mostra o número de rodadas comparadas, como elementos de comprimento, e o número de rodadas comparadas é o comprimento -1 (não é necessário comparar com você mesmo) para (int i = 0; i <Array.Length - 1; i ++) {System.out.println ("Thread" + (i + 1) + "start"); // A segunda camada de loop, cada uma de duas comparações adjacente diminui uma vez e o número de vezes diminui à medida que o número de rodadas aumenta. Cada rodada determina a maior, e não há necessidade de comparar a maior para (int j = 0; j <array.length - 1 - i; j ++) {if (matriz [j+1] <array [j]) {temp = matriz [j]; array [j] = array [j + 1]; matriz [j + 1] = temp; } System.out.println ("th" + (i + 1) + "redonda," th " + (j + 1) +" compare: "); para (int k: array) {system.out.print (k +" ");} system.out.println ();} system.out.println (" resultado); para ("para" "para ("); } System.out.println ();Resultados da saída de teste:
2 3 5 6 6 3 3 5 6 3 3 3 5 6 3 3 3 5 6 3 3 3 5 6 3 3 3 5 6 3 3 3 5 6 3 3 3 5 6 3 3 3 5 6 3 3 3 5 6 3 3 3 5 6 3 3 3 5 6 3 3 3 5 6 4 3 3 5 6 4 4 4 4 4 4 5 6 4 4 4 4 4 4 4 5 6 4 4 4 4 4 4 4 4 4 4 5 6 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 Resultado final 2 2 3 5 6
Após o teste, é consistente com os resultados no exemplo.