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++
#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]);
}
}
1 2 4 5
#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 << ' ';
}
}
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.
Laços, ponteiros, tamanhos e buffers temporários são escritos explicitamente.
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