8 min

Counting Sort

Algoritmo de ordenação não comparativo que conta a frequência de cada elemento para determinar suas posições no array ordenado.

MédiaO(n + k) / O(n + k)OrdenaçãoNão ComparativoLinear

Visualizador Interativo

Fase: ContagemPasso 1 / 29
Array Original
4
0
2
1
7
2
1
3
3
4
5
5
2
6
4
7
3
8
1
9
Velocidade:800ms
Historico de Passos
#0Valor máximo encontrado: 7. Criando array de contagem com 8 posições.

Como Funciona

O Counting Sort não compara elementos entre si. Em vez disso, conta quantas vezes cada valor aparece e usa essa informação para posicionar os elementos diretamente. Funciona em três fases: contagem (conta ocorrências), acumulação (calcula posições finais) e posicionamento (coloca cada elemento na posição correta). É extremamente eficiente quando o intervalo de valores (k) é pequeno em relação ao tamanho do array (n). Porém, não funciona bem com valores muito grandes ou números negativos sem adaptação.

O Counting Sort é O(n + k) porque não compara elementos. Quando k = O(n), é linear. É a base para o Radix Sort.

Passo a Passo

  1. Encontra o valor máximo do array
  2. Cria um array de contagem de tamanho max+1
  3. Conta a frequência de cada valor
  4. Calcula a soma acumulada das contagens
  5. Percorre o array original de trás para frente
  6. Coloca cada elemento na posição indicada pela contagem

Análise de Complexidade

⏱️Tempo
O(n + k)

n é o tamanho do array, k é o valor máximo. Percorre o array duas vezes e o array de contagem uma vez.

💾Espaco
O(n + k)

Precisa do array de contagem de tamanho k+1 e do array de saída de tamanho n.

🎯Melhor Caso
O(n + k)

Sempre o mesmo, independente da entrada.

⚠️Pior Caso
O(n + k)

Quando k é muito grande comparado a n, o espaço e tempo são dominados por k.

Comparação com Outros Algoritmos

AlgoritmoTempoEspacoEstavelMelhor Para
Counting Sort(atual)O(n + k)O(n + k)SimInteiros com intervalo pequeno
Bubble SortO(n²)O(1)SimFins didáticos
Quick SortO(n log n)O(log n)NaoUso geral
Merge SortO(n log n)O(n)SimGrandes datasets

Dicas e Erros Comuns

  • Esquecer de percorrer de trás para frente (perde estabilidade)
  • Não calcular a soma acumulada corretamente
  • Usar com valores negativos sem adaptar o algoritmo

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 counting_sort(array):Definição
2 if not array:
3 return array
4
5 max_val = max(array)Encontrar Máximo
6
7 count = [0] * (max_val + 1)Array de Contagem
8
9 for num in array:Contagem
10 count[num] += 1
11
12 for i in range(1, len(count)):Soma Acumulada
13 count[i] += count[i - 1]
14
15 output = [0] * len(array)Array de Saída
16
17 for i in range(len(array) - 1, -1, -1):Posicionamento
18 output[count[array[i]] - 1] = array[i]
19 count[array[i]] -= 1
20
21 return output
22