Menu
Coddy logo textTech

Bubble sort

Última atualização

O bubble sort percorre a lista repetidamente, compara cada par de elementos adjacentes e os troca se estiverem na ordem errada. Após cada passagem completa, o maior valor restante "borbulhou" até sua posição correta no final, então cada passagem examina um elemento a menos. Pressione reproduzir acima para ver as comparações e trocas, ou avance por elas uma de cada vez.

É um dos algoritmos de ordenação mais fáceis de entender, o que o torna um ótimo primeiro algoritmo, mas seu tempo de execução O(n²) o torna impraticável para entradas grandes.

Complexidade de tempo e espaço

CasoComplexidadeNotas
Melhor casoO(n)Já ordenado, com uma verificação de saída antecipada
Caso médioO(n²)Ordem aleatória
Pior casoO(n²)Ordenado ao contrário
EspaçoO(1)No local, apenas uma variável temporária
EstávelSimElementos iguais mantêm sua ordem relativa

Passo a passo

PassoO que acontece
1Comece no início do arranjo.
2Compare o elemento atual com o próximo.
3Se estiverem fora de ordem, troque-os.
4Avance uma posição à direita e repita até o final (uma passagem).
5Repita as passagens; cada passagem fixa mais um elemento no final.
6Pare quando uma passagem completa não fizer trocas.

Exemplo resolvido

Ordenando [5, 2, 4, 1]:

PassagemArranjoAção
1[2, 4, 1, 5]Troca 5,2, depois 5,4, depois 5,1; o 5 borbulha até o final.
2[2, 1, 4, 5]2,4 em ordem; troca 4,1; 4,5 em ordem; o 4 fica posicionado.
3[1, 2, 4, 5]Troca 2,1; o restante já está em ordem; o 2 fica posicionado.
4[1, 2, 4, 5]Uma passagem completa não faz trocas, então o arranjo está ordenado e o algoritmo para.

Quando usar o bubble sort

Use quandoEvite quando
Está ensinando ou aprendendo como funcionam as ordenações por comparaçãoEstá ordenando entradas grandes, onde O(n²) é lento demais
A entrada é minúscula ou quase ordenada (com saída antecipada se aproxima de O(n))Você precisa da ordenação de propósito geral mais rápida: use quicksort ou merge sort
Você precisa de uma ordenação estável, no local e com quase nenhum códigoOs dados estão em ordem aleatória e o desempenho importa
Está detectando se uma lista curta já está ordenada em uma única passagemMuitas escritas são caras (p. ex. memória flash); a ordenação por seleção faz menos trocas

Código de Bubble Sort

Uma implementação limpa e executável de Bubble Sort em Python, JavaScript, Java, C++, C. Escolha uma linguagem, copie o código ou abra-o já carregado no Playground da Coddy.

Código de Bubble Sort em Python

Python
1def bubble_sort(a):2    n = len(a)3    for i in range(n - 1):4        swapped = False5        for j in range(n - 1 - i):6            if a[j] > a[j + 1]:7                a[j], a[j + 1] = a[j + 1], a[j]8                swapped = True9        if not swapped:10            break  # no swaps means the list is already sorted11    return a12
13
14nums = [5, 1, 4, 2, 8]15print("Before:", nums)16bubble_sort(nums)17print("After: ", nums)
Execute este código no Playground de Python

Perguntas frequentes sobre o bubble sort

Qual é a complexidade de tempo do bubble sort?
O bubble sort é executado em tempo O(n²) nos casos médio e pior por causa dos laços aninhados. Com uma otimização de saída antecipada pode alcançar O(n) em um arranjo já ordenado. Usa O(1) de espaço extra.
O bubble sort é estável?
Sim. O bubble sort só troca elementos adjacentes quando estão estritamente fora de ordem, então elementos iguais nunca se ultrapassam e mantêm sua ordem relativa original.
Por que se chama bubble sort?
Em cada passagem o maior valor não ordenado move-se passo a passo em direção ao final do arranjo, como uma bolha que sobe à superfície, daí o nome "bubble" (bolha).
Qual é a diferença entre bubble sort e insertion sort?
Ambos são executados em O(n²) e são estáveis e no local, mas movem os dados de forma diferente: o bubble sort troca repetidamente pares adjacentes fora de ordem, enquanto o insertion sort pega cada elemento e o desliza até seu lugar correto no prefixo ordenado. O insertion sort geralmente faz menos escritas e é mais rápido na prática, especialmente com dados quase ordenados.
Quando devo usar o bubble sort em vez do quicksort?
Quase nunca em cargas de trabalho reais: o tempo médio O(n log n) do quicksort esmaga o O(n²) do bubble sort em tudo, exceto entradas minúsculas. O bubble sort só vale a pena quando a lista é muito pequena ou quase ordenada, ou quando você quer a ordenação estável mais simples possível para ensinar.
A otimização de saída antecipada muda o pior caso do bubble sort?
Não. Registrar se uma passagem fez alguma troca permite ao bubble sort parar cedo e alcançar O(n) em entradas já ordenadas, mas um arranjo ordenado ao contrário ainda precisa de todas as comparações, então o pior caso continua O(n²). A otimização só ajuda no melhor caso e nos quase ordenados.
Coddy programming languages illustration

Domine algoritmos com a Coddy

COMEÇAR