Baseado no livro Grokking Algorithms

Algoritmos que todo dev precisa conhecer

Um guia visual e interativo sobre os algoritmos fundamentais da computação. Do O(n) ao O(n²) — entenda como cada um funciona e quando usar.

15Algoritmos
6Categorias
Curiosidade
15 algoritmos
BuscaIniciante

Busca Simples

Percorre cada elemento de uma lista sequencialmente até encontrar o alvo. A abordagem mais intuitiva, ideal para listas pequenas ou não ordenadas.

Tempo:O(n)
Espaço:O(1)
BuscaIniciante

Busca Binária

Divide a lista ordenada ao meio repetidamente, eliminando metade dos elementos a cada passo. Muito mais rápido que a busca simples para grandes volumes.

Tempo:O(log n)
Espaço:O(1)
OrdenaçãoIniciante

Ordenação por Seleção

Encontra o menor elemento e o move para a posição correta, repetindo para cada posição. Simples de entender, mas lento para listas grandes.

Tempo:O(n²)
Espaço:O(1)
OrdenaçãoIntermediário

Quicksort

Escolhe um pivô e particiona os elementos em menores e maiores, ordenando recursivamente cada parte. Um dos algoritmos de ordenação mais usados na prática.

Tempo:O(n log n)
Espaço:O(log n)
Dividir e ConquistarIntermediário

Merge Sort

Divide a lista em metades, ordena cada metade recursivamente e depois intercala os resultados. Garante O(n log n) mesmo no pior caso.

Tempo:O(n log n)
Espaço:O(n)
OrdenaçãoIniciante

Bubble Sort

Compara elementos adjacentes e os troca se estiverem na ordem errada, repetindo até que a lista esteja ordenada. Os maiores elementos "borbulham" para o final.

Tempo:O(n²)
Espaço:O(1)
OrdenaçãoIniciante

Insertion Sort

Constrói a lista ordenada um elemento de cada vez, inserindo cada novo elemento na posição correta. Eficiente para listas pequenas ou quase ordenadas.

Tempo:O(n²)
Espaço:O(1)
OrdenaçãoIntermediário

Radix Sort

Ordena números dígito por dígito, do menos significativo ao mais significativo, usando ordenação estável em cada passagem. Alcança tempo linear para inteiros.

Tempo:O(n)
Espaço:O(n)
OrdenaçãoIniciante

Counting Sort

Conta a ocorrência de cada valor e usa essas contagens para construir a lista ordenada diretamente. Extremamente eficiente quando o intervalo de valores é limitado.

Tempo:O(n)
Espaço:O(n)
GrafosIntermediário

Busca em Largura

Explora um grafo camada por camada, visitando todos os vizinhos antes de avançar. Encontra o caminho mais curto em grafos não ponderados.

Tempo:O(V+E)
Espaço:O(V+E)
GrafosIntermediário

Busca em Profundidade

Explora cada ramo do grafo o mais fundo possível antes de retroceder. Fundamental para detectar ciclos e ordenação topológica.

Tempo:O(V+E)
Espaço:O(V+E)
GrafosAvançado

Algoritmo de Dijkstra

Encontra o caminho mais curto entre dois nós em um grafo ponderado com pesos positivos. Usa uma fila de prioridade para escolher o próximo nó.

Tempo:O(V+E)
Espaço:O(V+E)
Programação DinâmicaIniciante

Fibonacci com Memoização

Calcula números de Fibonacci armazenando resultados já computados para evitar recálculos. Introdução clássica à programação dinâmica.

Tempo:O(n)
Espaço:O(n)
Programação DinâmicaAvançado

Problema da Mochila

Maximiza o valor total de itens em uma mochila com capacidade limitada. Um problema clássico de otimização resolvido com tabela de subproblemas.

Tempo:O(n·m)
Espaço:O(n·m)
GulososIniciante

Problema do Troco

Encontra o número mínimo de moedas para dar troco, sempre escolhendo a maior moeda possível. Exemplo clássico de algoritmo guloso.

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