As partes ficam pequenas.
O caso-base é um segmento com zero ou um item: ele já está ordenado. Cada chamada divide a região ativa aproximadamente ao meio, até que reste somente esse caso imediato.
Divida em partes pequenas; reconstrua em uma ordem previsível.
Execuções concluídas nesta bancada, medidas durante o playback ativo no navegador e salvas apenas neste dispositivo.
Execute o algoritmo até o fim para transformar esta bancada em uma série de medições reais.
Mescla duas sequências já ordenadas em uma só. Cada barra representa um item; a cor quente marca a comparação atual e o verde calmo indica que uma posição já não precisa ser revisitada.
Mantém desempenho consistente, ao custo de memória auxiliar; a combinação usa índices para evitar remoções lineares.
O algoritmo trata todos os itens, mas organiza as decisões em níveis. O termo log representa quantas vezes o problema pode ser dividido ao meio.
Em base 2, 16 itens exigem 4 níveis; 32 itens exigem 5. Dobrar a entrada adiciona apenas um nível.Escolha duas técnicas diferentes. As curvas usam a mesma escala visual para explicar como o custo tende a aumentar.
Use este par para observar por que O(n²) acumula trabalho mais depressa que O(n log n) quando a lista cresce. Merge Sort tende a crescer mais devagar do que Bubble Sort quando aumentam quantidade de itens (n). Isso descreve tendência assintótica, não mede o tempo do seu aparelho.
A bancada separa a sequência em partes menores, mas é a operação de merge que transforma duas metades já ordenadas em uma única resposta correta. Dois cursores avançam pelas metades e liberam, a cada escolha, o menor item que ainda pode ocupar a próxima posição.
O caso-base é um segmento com zero ou um item: ele já está ordenado. Cada chamada divide a região ativa aproximadamente ao meio, até que reste somente esse caso imediato.
Se os dois prefixos estão ordenados, basta comparar os seus primeiros itens. Escolher o menor mantém a saída ordenada; quando uma metade se esgota, o restante da outra pode ser copiado sem nova comparação.
Por hipótese, as duas metades retornam ordenadas. Como a mesclagem preserva todos os itens e produz uma sequência não decrescente, o segmento inteiro também retorna ordenado.
A recorrência T(n) = 2T(n/2) + Θ(n) descreve duas metades e uma mesclagem linear. Como a árvore de divisão tem Θ(log n) níveis, o tempo é Θ(n log n) nos casos melhor, médio e pior — uma garantia que não depende do formato inicial da entrada.
Em vetores, o espaço auxiliar linear é a principal contrapartida da versão estável e com custo garantido. Em listas encadeadas, a mesclagem pode reorganizar nós sem o mesmo buffer; para volumes maiores que a memória, blocos ordenados podem ser combinados em uma mesclagem k-way. Implementações práticas ainda alternam os vetores de origem e destino, usam Insertion Sort em blocos pequenos e pulam a mesclagem quando as metades já estão em ordem.
O destaque acompanha o mesmo passo que você vê nas barras. Execute em câmera lenta para conectar intenção e efeito.
function mergeSort(items) { // Split recursively and merge sorted halves if (items.length <= 1) return items; const middle = Math.floor(items.length / 2); const left = mergeSort(items.slice(0, middle)); const right = mergeSort(items.slice(middle)); return merge(left, right);} function merge(left, right) { const result = []; let leftIndex = 0, rightIndex = 0; while (leftIndex < left.length && rightIndex < right.length) { result.push(left[leftIndex] <= right[rightIndex] ? left[leftIndex++] : right[rightIndex++]); } return result.concat(left.slice(leftIndex), right.slice(rightIndex));}Use quando estabilidade e previsibilidade importam, como em grandes coleções ou dados que chegam em blocos. A melhor forma de internalizar essa escolha é comparar o mesmo cenário com outras estratégias e observar como as métricas se comportam.
testar no modo corrida