Merge Sort
A ideia básica do Merge Sort é criar uma sequência ordenada a partir de duas outras também ordenadas. Para isso, o algoritmo Merge Sort divide a sequência original em pares de dados, agrupa estes pares na ordem desejada; depois as agrupa as sequências de pares já ordenados, formando uma nova sequência ordenada de quatro elementos, e assim por diante, até ter toda a sequência ordenada.
Algoritmo: Os três passos úteis dos algoritmos dividir-para-conquistar, que se aplicam ao Merge Sort são:
Dividir: Dividir os dados em subsequências pequenas; Este passo é realizado recursivamente, iniciando com a divisão do vetor de n elementos em duas metades. Cada uma das metades é novamente dividida em duas novas metades e assim por diante, até que não seja mais possível a divisão (ou seja, sobrem n vetores com um elemento cada).
Conquistar: Classificar as duas metades recursivamente aplicando o merge sort;
Combinar: Juntar as duas metades em um único conjunto já classificado.
Para completar a ordenação do vetor original de n elementos, faz-se o merge ou a fusão dos sub-vetores já ordenados.

A desvantagem do Merge Sort é que requer o dobro de memória, ou seja, precisa de um vetor com as mesmas dimensões do vetor que está sendo classificado (para armazenar as cópias da esquerda e direita).
Análise da complexidade
Para analisar a complexidade do Merge Sort, deve-se levar em consideração a complexidade método interno merge() e do algoritmo principal que o chama:
Método merge(): cada chamada une um total de
direita - esquerdaelementos, que no máximo, én. É feita uma comparação a cada iteração. O total de passos do primeiro while não é mais do quen(dos outros, no pior caso,n/2). Logo, complexidade do método merge() éO(n).Merge Sort: para
n = 1,T(1) = 1.Paran > 1, executa-se recursivamente: uma vez(n/2)com elementos de um lado e outra vez com os(n/2)elementos restantes. Após isso, executa-se o métodomerge(), que executanoperações. T(n) = T (n/2) + T (n/2) + n T(n) = O (n log2 n)
Last updated
Was this helpful?