Bubble Sort

💡 Entendendo a ideia

O algoritmo de ordenação Bubble Sort é um dos mais simples e fáceis de se compreender e implementar. Imagine um vetor não ordenado, como o exibido na imagem a seguir:

Representação visual do funcionamento do algoritmo Bubble Dort.

Para ordená-lo, o Bubble Sort irá comparar pares de posições, direcionando o maior elemento para o final do vetor. Isso acontecerá diversas vezes, resultando na ordenação do vetor.

🧑‍💻 Do conceito ao código

A implementação iterativa do Bubble Sort é bastante simples e envolve

void trocar(int *a, int *b){
    int aux = *a;
    *a = *b;
    *b = aux;
}

void bubbleSort(int v[], int tam){
    for (int i = 0; i < tam - 1; i++){
        for (int j = 0; j < tam - i - 1; j++){
            if (v[j] > v[j + 1]){
                trocar(&v[j], &v[j+1]); 
            }
        }
    }
}

Agora, acompanhe a representação visual da execução do algoritmo, considerando um vetor de 4 posições.

Representação visual do funcionamento do algoritmo Bubble Dort.

Note que o vetor foi ordenado no meio da execução do algoritmo. Apesar disso, o algoritmo continua executando, já que ele não é "inteligente" a ponto de perceber que o vetor já está ordenado.

Versão melhorada

Podemos aprimorar o algoritmo para interromper o processo antes, se nenhuma troca for efetuada.

void bubbleSort(int v[], int tam){
    for (int i = 0; i < tam - 1; i++){
        bool trocou = false;
        for (int j = 0; j < tam - i - 1; j++){
            if (v[j] > v[j + 1]){
                trocar(&v[j], &v[j+1]); 
                trocou = true;
            }
        }
        if(!trocou) break;
    }
}

🎬 Vídeo complementar