O Merge Sort é um algoritmo de ordenação baseado na técnica divisão-conquista, que funciona
dividindo um array em subarrays menores, ordenando cada subarray e, em seguida, mesclando os subarrays ordenados para formar o array final ordenado. 1. Divisão: O array é dividido continuamente pela metade até que não possa mais ser dividido (ou seja, o array tem apenas um elemento, que já está ordenado). 2. Ordenação: Os subarrays são ordenados individualmente. Um subarray com apenas um elemento é considerado ordenado. 3. Mesclagem: Os subarrays ordenados são mesclados para formar um único array ordenado. Esse processo é repetido até que o array inteiro esteja ordenado. O Merge sort foi originalmente proposto por John von Neumann no final da década de 1940, embora seu nome tenha sido popularizado por Jon Bentley em 1986. Vantagens: 1- Eficiência: tanto para o melhor, médio e pior caso, a sua complexidade é n∗logn. Assim, independente da disposição dos dados em um array, a ordenação será eficiente. 2- Estabilidade: O Merge Sort é um algoritmo estável, o que significa que ele mantém a ordem relativa de elementos com chaves iguais. Isso é importante em casos em que a ordem original dos dados deve ser preservada. 3- Implementação Simples: em termos de implementação, o Merge Sort é relativamente simples e intuitivo de entender. Desvantagens: 1- Uso de Memória Adicional: Uma das principais desvantagens do Merge Sort é que ele requer espaço adicional na memória para armazenar as sublistas durante o processo de mesclagem. 2- Complexidade Espacial: O Merge Sort tem uma complexidade espacial de O(n), o que significa que ele pode consumir mais memória do que outros algoritmos de ordenação, como o Quick Sort. 3- Desempenho Pior em Conjuntos de Dados Pequenos: para conjuntos de dados muito pequenos, o Merge Sort pode ser menos eficiente do que algoritmos de ordenação mais simples, devido ao seu overhead de divisão e mesclagem. 4- Não é In-place: O Merge Sort não é um algoritmo in-place, o que significa que ele não pode classificar os elementos no local, exigindo espaço de memória adicional para armazenar as sublistas durante a execução.
Representação visual do algoritmo.
Implementação do algoritmo na linguagem c:
void mergeSort(int∗ vetor, int inicio, int fim){
if (inicio < fim) {
int meio = (inicio+fim)/2; //achar o meio do vector
mergeSort(vetor, inicio, meio); //vector à esquerda
mergeSort(vetor, meio+1, fim); //vector à direita
merge(vetor, inicio, meio, fim); //função de comparação, ordenação e junção
1 void merge(int vetor[], int inicio, int meio, int fim) {