Algoritmos C/C++

Ordenação por bolha (bubble sort) em C e C++

Nesta lição, você vai implementar o bubble sort trocando repetidamente de lugar os pares vizinhos que estão fora de ordem.

Introdução

O bubble sort percorre o array várias vezes, comparando cada par de elementos vizinhos e trocando-os quando estão fora de ordem. A cada passada, o maior valor ainda não ordenado vai se deslocando para o fim do array.

Pontos importantes

  • Teste com entradas vazias, com um único elemento, com valores repetidos e já ordenadas.
  • Primeiro faça funcionar corretamente, depois otimize.
  • Em código real, prefira as funções prontas da biblioteca padrão.

Visualizador de Ordenação por bolha (bubble sort) em C e C++

O(n)

Use Executar ou Passo para acompanhar cada comparação e movimento dos dados.

Exemplos de código C e C++

C
Executar →
main.c
#include <stdio.h>

int main(void) {
    int values[] = {5, 1, 4, 2};
    for (int end = 3; end > 0; --end) {
        int changed = 0;
        for (int index = 0; index < end; ++index) {
            if (values[index] > values[index + 1]) {
                int temporary = values[index];
                values[index] = values[index + 1];
                values[index + 1] = temporary;
                changed = 1;
            }
        }
        if (!changed) break;
    }
    for (int index = 0; index < 4; ++index) {
        printf("%d ", values[index]);
    }
}
Resultado da execução
1 2 4 5
C++
Executar →
main.cpp
#include <iostream>
#include <vector>

int main() {
    std::vector values{5, 1, 4, 2};
    for (auto end = values.end(); end != values.begin(); --end) {
        bool changed = false;
        for (auto item = values.begin(); item + 1 != end; ++item) {
            if (*item > *(item + 1)) {
                std::iter_swap(item, item + 1);
                changed = true;
            }
        }
        if (!changed) break;
    }
    for (int value : values) {
        std::cout << value << ' ';
    }
}
Resultado da execução
1 2 4 5

Comparação entre C e C++

A variável changed registra se houve alguma troca na passada. Se não houve nenhuma, o array já está ordenado e o laço para mais cedo, então um array já ordenado custa apenas O(n). No pior caso, o algoritmo leva O(n²), por isso é usado principalmente para aprender. Na prática, código em C++ costuma usar std::sort.

C

Laços, ponteiros, tamanhos e buffers temporários são escritos explicitamente.

C++

Iteradores e algoritmos padrão separam o processamento da forma como os dados são guardados.

Exercícios práticos

Execute as duas versões e depois mude o código para observar a diferença de segurança que cada linguagem oferece.

  • Simule cada comparação no papel.
  • Teste com valores repetidos e com valores muito grandes e muito pequenos.
  • Meça o tempo do seu código e compare com a biblioteca padrão.

Pratique com um desafio

Use o conteúdo desta lição para resolver um problema real. Cada desafio roda no navegador, com testes instantâneos e uma revisão por IA.

Todos os desafios