8 min

Bucket Sort

Algoritmo distributivo que divide elementos em buckets, ordena cada um, e concatena o resultado.

MédiaO(n+k) / O(n+k)OrdenaçãoDistributivoLinear

Visualizador Interativo

Array[ 0.42, 0.32, 0.23, 0.52, 0.25, 0.47, 0.51 ]Passo 1 / 19
0.42
0
0.32
1
0.23
2
0.52
3
0.25
4
0.47
5
0.51
6
Buckets
Bucket 0
vazio
Bucket 1
vazio
Bucket 2
vazio
Bucket 3
vazio
Bucket 4
vazio
Bucket 5
vazio
Bucket 6
vazio
Velocidade:800ms
Historico de Passos
#0Inicializando 7 buckets vazios

Como Funciona

Bucket Sort é um algoritmo de ordenação que não compara elementos diretamente. Em vez disso, distribui os elementos em "baldes" baseado nos seus valores, ordena cada balde, e concatena tudo. A magia acontece quando os elementos estão bem distribuídos. Se cada bucket tem poucos elementos, ordenar cada um é rápido. O resultado final é quase linear. O algoritmo brilha para números de ponto flutuante entre 0 e 1 com distribuição uniforme. Fora desse cenário, pode degradar para O(n²) se todos os elementos caírem no mesmo bucket.

Bucket Sort é O(n) quando os dados estão uniformemente distribuídos. É perfeito para floats entre 0 e 1.

Passo a Passo

  1. Cria n buckets vazios (n = tamanho do array)
  2. Para cada elemento, calcula o bucket de destino (valor × n)
  3. Coloca o elemento no bucket correspondente
  4. Ordena cada bucket individualmente
  5. Concatena os buckets em ordem

Analise de Complexidade

⏱️Tempo
O(n + k)

n é o número de elementos, k é o número de buckets. Linear quando bem distribuído.

Ver prova

Distribuição O(n). Ordenação de cada bucket O(n/k × log(n/k)), totalizando O(n) quando uniforme. Concatenação O(k).

💾Espaco
O(n + k)

Precisa de espaço para os n elementos distribuídos em k buckets.

🎯Melhor Caso
O(n + k)

Elementos uniformemente distribuídos entre os buckets.

⚠️Pior Caso
O(n²)

Todos os elementos no mesmo bucket. Degrada para o sort interno.

Comparacao com Outros Algoritmos

AlgoritmoTempoEspacoEstavelMelhor Para
Bucket Sort(atual)O(n+k)O(n+k)SimFloats uniformemente distribuídos
Bubble SortO(n²)O(1)SimArrays pequenos
Counting SortO(n+k)O(k)SimInteiros em faixa conhecida
Radix SortO(d×n)O(n+k)SimInteiros com número fixo de dígitos

Dicas e Erros Comuns

  • Assumir que sempre é O(n) — depende da distribuição
  • Usar poucos buckets, sobrecarregando alguns deles
  • Ignorar o custo do algoritmo de ordenação interno
  • Aplicar em dados não uniformes sem ajustar os buckets

Perguntas de Entrevista

Pratique respondendo a perguntas comuns de entrevistas tecnicas. Clique em uma pergunta para iniciar uma sessao de pratica com IA.

Implementacao

python
1def bucket_sort(arr):Definição
2 if len(arr) == 0:Caso Base
3 return arr
4
5 n = len(arr)Inicialização
6 buckets = [[] for _ in range(n)]
7
8 for num in arr:Distribuição
9 index = min(int(num * n), n - 1)
10 buckets[index].append(num)
11
12 for bucket in buckets:Ordenação
13 bucket.sort()
14
15 result = []Concatenação
16 for bucket in buckets:
17 result.extend(bucket)
18
19 return result
20