Módulo 9 - Ordenação eficiente: merge sort e quick sort
Merge sort: dividir e intercalar
9 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 12/07/2026
O que você vai aprender
- Entender as três fases do merge sort: dividir, ordenar as metades e intercalar.
- Compreender por que intercalar duas listas ordenadas é uma operação barata.
- Seguir a recursão do merge sort até o caso base de um único elemento.
- Colocar os passos do merge sort na ordem correta.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: Merge sort: dividir e intercalar.
Os objetivos desta aula. Entender as três fases do merge sort: dividir, ordenar as metades e intercalar. Compreender por que intercalar duas listas ordenadas é uma operação barata. Seguir a recursão do merge sort até o caso base de um único elemento. Colocar os passos do merge sort na ordem correta.
Veja o essencial, parte por parte.
As três fases do merge sort. Dividir: corte a lista no meio, em duas metades.
A intercalação por dentro. Vale ver a intercalação em detalhe, porque é o coração do algoritmo.
O custo e o preço a pagar. A intercalação costuma criar uma lista nova para o resultado, gastando memória extra proporcional ao tamanho da entrada.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
As três fases do merge sort
O merge sort segue à risca o roteiro de dividir para conquistar. A fase de dividir é trivial: encontre o meio e parta a lista em duas metades, esquerda e direita. A fase de conquistar não faz nada de novo, apenas confia na recursão: para ordenar a metade esquerda, o algoritmo chama a si mesmo sobre ela; para a direita, idem. Essa confiança parece mágica, mas se sustenta no caso base. Quando uma metade encolhe até ter um único elemento, ela já está ordenada, porque um elemento sozinho não tem como estar fora de ordem. A recursão então para de descer e começa a subir, e é na subida que acontece o trabalho de verdade.
A fase que dá nome ao algoritmo é a combinação, a intercalação. Ao voltar da recursão, você tem em mãos duas metades já ordenadas e precisa fundi-las numa lista maior também ordenada. Aqui está a beleza: intercalar duas listas ordenadas é fácil e rápido. Você olha o primeiro elemento de cada metade, pega o menor dos dois, coloca no resultado e avança naquela metade. Repete até esvaziar as duas. Como cada elemento é olhado uma única vez, intercalar custa proporcional ao tamanho total. É essa intercalação barata, feita em cada nível da recursão, que dá ao merge sort o seu custo O(n log n).
A intercalação por dentro
Vale ver a intercalação em detalhe, porque é o coração do algoritmo. Imagine duas metades ordenadas: a esquerda é 2, 6 e a direita é 4, 8. Você mantém um marcador na frente de cada uma. Compara 2 com 4: o 2 é menor, vai para o resultado e o marcador da esquerda avança. Agora compara 6 com 4: o 4 é menor, vai para o resultado e o marcador da direita avança. Compara 6 com 8: o 6 vai. Sobrou só o 8 na direita, que entra por último. Resultado: 2, 4, 6, 8. Repare que você nunca voltou atrás nem comparou tudo com tudo; cada elemento foi visitado uma vez só.
FUNÇÃO intercalar(esquerda, direita)
resultado <- []
i <- 0 // marcador da esquerda
j <- 0 // marcador da direita
ENQUANTO i < tamanho(esquerda) E j < tamanho(direita) FAÇA
SE esquerda[i] <= direita[j] ENTÃO
adicionar(resultado, esquerda[i])
i <- i + 1
SENÃO
adicionar(resultado, direita[j])
j <- j + 1
FIM
FIM
// um dos lados pode ter sobrado; joga o resto no fim
adicionar_resto(resultado, esquerda, i)
adicionar_resto(resultado, direita, j)
RETORNE resultado
FIMDois marcadores caminham pelas metades ordenadas, escolhendo sempre o menor da frente. O que sobrar de um lado entra no fim.
🎮 Jogo da aula
Monte o merge sort na ordem
Coloque os passos do merge sort na sequência correta, de cima para baixo.
O custo e o preço a pagar
Por que o merge sort é O(n log n)? Pense nos níveis da divisão. A lista de n itens vira duas de n meios, depois quatro de n quartos, e assim por diante, até sobrarem pedaços de um elemento. O número de níveis dessa descida é log n, porque a lista é partida ao meio a cada nível. Em cada nível, a intercalação de todos os pedaços daquele nível percorre no total os n elementos. Logo, são log n níveis, cada um custando n: o produto é n vezes log n. E, diferente do quick sort que você verá adiante, esse custo vale sempre, no melhor e no pior caso, porque a divisão pela metade não depende dos valores da lista.
Teste rápido
Por que intercalar duas listas já ordenadas é uma operação rápida?
Perguntas frequentes
- O merge sort ordena a lista original ou cria uma nova?
- Na versão clássica, ele cria listas novas durante a intercalação e devolve uma lista ordenada, sem alterar a original. É por isso que se diz que ele não é in-place: gasta memória extra proporcional ao tamanho da entrada. Existem variações mais econômicas de memória, mas elas complicam o código.
- Por que o merge sort tem custo garantido, sem pior caso ruim?
- Porque a divisão é sempre pela metade exata, independentemente dos valores. Isso garante log n níveis sempre, e cada nível intercala n elementos. O resultado é n log n no melhor, no médio e no pior caso. O quick sort, que você verá a seguir, depende da escolha do pivô e pode degradar.
- O que é o caso base do merge sort?
- É uma lista com um único elemento (ou vazia). Ela já está ordenada por definição, porque não há dois elementos para ficarem fora de ordem. Ao chegar nesse tamanho, a recursão para de dividir e começa a subir, intercalando os pedaços de volta em listas cada vez maiores.
- A intercalação precisa das duas metades ordenadas mesmo?
- Sim, é a condição que faz tudo funcionar. Se as metades não estivessem ordenadas, comparar só os elementos da frente não garantiria pegar o menor de todos. A recursão é justamente o que assegura que, na hora de intercalar, as duas partes já chegaram ordenadas de baixo.
- O merge sort serve para ordenar textos e não só números?
- Serve para qualquer coisa que se possa comparar por ordem: números, palavras em ordem alfabética, datas, o que for. O algoritmo não muda; o que muda é a regra de comparação usada na intercalação. Trocar o critério de menor por antes na ordem alfabética já ordena textos.
- Onde o merge sort é usado na prática?
- Ele é a base de ordenações estáveis em várias linguagens e bibliotecas, sozinho ou combinado com outros métodos. Por garantir O(n log n) e preservar a ordem de itens iguais, é escolhido quando a estabilidade importa, por exemplo ao ordenar uma tabela por uma coluna sem bagunçar a ordem anterior.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.