Slide # 1
Slide # 2
Slide # 3
Slide # 4
Slide # 5

18 de julho de 2014

A idéia 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:
  1. 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).
  2. Conquistar: Classificar as duas metades recursivamente aplicando o merge sort;
  3. Combinar: Juntar as duas metades em um único conjunto já classificado.
  4. 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.
Observe a figura: Vetor original com elemento desordenados.
012345678
532546322337411710

O vetor original é subdividido em dois vetores.
012345678
532546322337411710

Cada um dos subvetores é novamente dividido. 
012345678
532546322337411710

E assim por diante. 
012345678
532546322337411710
532546322337411710
Após todo o processo de divisão, ocorre o processo da fusão ordenada dos subvetores. O subvetor (53) com o subvetor (25). Ordenando os dois.
012345678
255346322337411710
O subvetor (25, 53) com o subvetor (46). Ordenando os dois.
012345678
254653322337411710
O subvetor (32) com o subvetor (23).
012345678
254653233237411710
O subvetor (25,46,53) com o subvetor (23,32). Ordenando os dois.
012345678
232532465337411710
O mesmo processo se repete no subvetor (37, 41, 17, 10).
012345678
232532465337411710
232532465337411017
232532465310173741

Os subvetores resultantes (23,25, 32, 36,53) e (10, 17, 37, 41) são fundidos ordenandos durante a fusão.
012345678
101723253237414653


O processo de ordenação termina!


Observe este video, um exemplo prático do MergeSort:





Veja também um exemplo de algoritmo genérico MergeSort em linguagem C++:

 
 
Algoritimo (fonte wikipedia)
  
 
 Bons Estudos!!
 
Fonte (cos.ufrj.br)