Voltar
OrdenaçãoIniciante

Bubble Sort

Os elementos maiores "borbulham" para o final — comparando e trocando pares adjacentes repetidamente até a lista estar ordenada.

Tempo:O(n²)
Espaço:O(1)
01

Como Funciona

Passo a passo do algoritmo

1

Percorra o array comparando pares

Comece do primeiro elemento e compare cada par adjacente. Se o elemento da esquerda for maior que o da direita, troque-os de posição.

para j de 0 até n-i-2: se array[j] > array[j+1]: troca(j, j+1)
2

O maior elemento "borbulha" para o final

Após cada passagem completa pelo array, o maior elemento não ordenado estará em sua posição definitiva no final. Este elemento não precisa ser comparado nas próximas passagens.

// Após passagem i: array[n-i..n-1] está ordenado
3

Repita para o restante

Faça novas passagens pelo array, mas cada vez comparando um elemento a menos no final (pois eles já estão ordenados).

para i de 0 até n-1: percorrer até n-i-1
4

Otimização com flag de troca

Se uma passagem completa acontecer sem nenhuma troca, o array já está ordenado. Esta otimização melhora o caso de listas quase ordenadas para O(n).

se nenhuma_troca: interromper
02

Implementação

Código comentado em JavaScript e Python

function bubbleSort(array) {
  const n = array.length;

  for (let i = 0; i < n - 1; i++) {
    let trocou = false; // Otimização: detectar array já ordenado

    // Cada passagem move o maior elemento não ordenado para o final
    for (let j = 0; j < n - i - 1; j++) {
      if (array[j] > array[j + 1]) {
        // Troca os elementos fora de ordem
        [array[j], array[j + 1]] = [array[j + 1], array[j]];
        trocou = true;
      }
    }

    // Se não houve troca, array já está ordenado
    if (!trocou) break;
  }

  return array;
}

// Exemplo de uso
const arr = [64, 34, 25, 12, 22, 11, 90];
console.log(bubbleSort(arr)); // [11, 12, 22, 25, 34, 64, 90]
03

Playground

Veja os elementos 'borbulhando' até suas posições corretas

bubble-sort — passo 1 de 43
64
[0]
34
[1]
25
[2]
12
[3]
22
[4]
11
[5]
90
[6]
Iniciando Bubble Sort...
LentoRápido
04

Quando Usar

Cenários ideais para este algoritmo

Aprendizado e ensino

Algoritmo ideal para introduzir conceitos de ordenação — lógica simples e visualização intuitiva das trocas.

Listas quase ordenadas

Com a otimização de flag, é eficiente para arrays que já estão quase ordenados, chegando a O(n) no melhor caso.

Detectar se está ordenado

Útil quando você precisa verificar se uma lista está ordenada e ordenar caso não esteja, com uma única passagem.

Listas muito pequenas

O overhead baixo de implementação torna o Bubble Sort prático para listas de poucos elementos onde a complexidade não importa.

05

Complexidade

Análise de desempenho por cenário

CenárioTempo
Melhor casoO(n)
Caso médioO(n²)
Pior casoO(n²)