Você está na página 1de 10

Instituto Superior de Transportes e Comunicações

Algoritmos e Estruturas de Dados


Tema:❖ Merge Sort

Discentes (s):
Ana Luanda
Edson Culpa
Sócrates Andrade
Docente :
Dr.. Inácio Gaspar Ticongolo
Abril, 2020
Introdução
A ordenação é o processo de organizar um conjunto de
elementos seguindo uma determinada ordem. Se a informação
estiver ordenada é possível utilizar algoritmos de pesquisa
mais eficientes. A suma importância da ordenação é
constatada durante o processamento de dados, pois é feita
para facilitar a pesquisa. Ou em maior grau de complexidade
pré ou pós-ordenando sequencias.
Algoritmo MergeSort
Os algoritmos de ordenação recursivos são algoritmos que
usam o princípio de dividir para conquistar, o MergeSort é um
deles. Foi criado por Von Neumann em 1945.
Implementação do MergeSort

1. Dividir o array ao meio;


2. Recursivamente ordenar a primeira parte do array;
3. Recursivamente ordenar a segunda parte do array;
4. Intercalar os dois arrays (fusão) gerando um array ordenado;
Na figura abaixo ilustra as etapas acima considerando um array [6,5,3,1,8,7,2,4]:
Algoritmo MergeSort codificado em java
public static void main(String[] args) { private static void intercalar(int v[],int aux[],int inicio, int meio,int fim){
// array de teste for(int i=inicio; i<=fim; i++){
int v[] = {4,6,7,3,5,1,2,8}; aux[i] = v[i];
// array auxiliar }
int aux[] = new int [v.length]; // percorre a primeira metade do array
mergeSort(v,aux,0,v.length-1); int j = inicio;
System.out.println(Arrays.toString(v)); // percorre a segunda metade do array
} int k = meio+1;
private static void mergeSort(int v[], int aux[], int inicio ,int fm){ // intercalar o array final
if(inicio<fim){ for(int i=inicio; i<=fim;i++){
int meio =(inicio+fim)/2; if(j>meio) v[i] = aux[k++];
mergeSort(v, aux, inicio, meio); else if(k>fim) v[i] = aux[j++];
mergeSort(v, aux, meio+1, fim); else if(aux[j] < aux[k]) v[i] = aux[j++];
intercalar(v, aux, inicio, meio, fim); else v[i] = aux[k++];
} }
}
Comparação com outros algoritmos
Em comparação a outros algoritmos de divisão e conquista,
como o Quicksort, o Merge apresenta a mesma complexidade,
tendo este o benefício de ter como pior caso 𝑂(𝑛 𝑙𝑜𝑔 𝑛).
Mergesort, ao contrário do quicksort e do Heapsort, é estável e
pode facilmente ser adptado para operar em listas encadeadas e
em listas bastante grandes. Embora o quicksort possa ser
operado em listas encadeadas, por vezes escolhendo um mau
pivô sem acesso aleatório
Vantagens e Desvantagens
Vantagens
O MergeSort é estável: não altera a ordem de dados iguais;
Pode ser adaptado para ordenação de arquivos externos (memória
secundária).
Desvantagens
Exige uma segunda lista do mesmo tamanho;
Requer o dobro da memoria;
Usa Varias Chamadas Recursivas.
Conclusão
O MergeSort é um algoritmo de ordenação recursivo por fusão,
que consiste em fazer copias de elementos.Este algoritmo
demostra estabilidade e eficiência em sequências com maior
carga de dados. A importância do mesmo é de permitir utilizar
algoritmos de pesquisas mais eficientes durante o
processamentos de dados.
Fim.