1. Se o array tiver 1 ou nenhum elemento, ele já está ordenado. Retorne-o.
2. Divida o array em dois subarrays:
- Esquerdo: da posição inicial até o meio.
- Direito: do meio até o final.
3. Recursivamente, aplique o Merge Sort nos subarrays esquerdo e direito.
4. Combine (merge) os dois subarrays ordenados:
- Compare os elementos de ambos os subarrays.
- Adicione o menor elemento ao array resultante.
- Adicione os elementos restantes de ambos os subarrays ao array resultante.
5. Retorne o array ordenado.
O Merge Sort é um algoritmo de ordenação baseado no paradigma Dividir e Conquistar. Ele divide o array em subarrays menores, ordena cada subarray e, em seguida, combina (merge) os subarrays ordenados para formar o array final ordenado.
Complexidade de Tempo: O(n log n) no pior, melhor e caso médio. Estável: Mantém a ordem relativa dos elementos iguais. Não in-place: Requer espaço adicional para armazenar os subarrays.
O array (vetor) é dividido recursivamente em dois subarrays de tamanhos aproximadamente iguais até que cada subarray tenha apenas um elemento.
Considere o array {5, 8, 4, 1, 6}:
ele será dividido em:
{5, 8} e {4, 1, 6}
{5} e {8} e {4} e {1, 6}
{1} e {6}
Os subarrays são combinados (merge) de forma ordenada.
Durante a combinação, os elementos de dois subarrays são comparados e o menor elemento é adicionado ao array resultante.
{5} e {8} são combinados para formar {5, 8}.
Após todas as combinações, o array original estará ordenado.
{5, 8, 4, 1, 6} → {1, 4, 5, 6, 8}.
Certifique-se de ter o Java Development Kit (JDK) instalado em sua máquina.
Um editor de texto ou IDE como IntelliJ IDEA, Eclipse ou VS Code.
Salve o código fornecido em um arquivo chamado Main.java.
Abra o terminal e navegue até o diretório onde o arquivo Main.java está salvo.
Execute o comando:
javac Main.java
Após a compilação, execute o programa com o comando:
java Main
O programa imprimirá o array original e o array ordenado no console.
Random numbers: [5, 8, 4, 1, 6, 9, 7, 4, 2, 3]
Sorted numbers: [1, 2, 3, 4, 4, 5, 6, 7, 8, 9]
int[] randomNumbers = {5, 8, 4, 1, 6, 9, 7, 4, 2, 3};
Sorted numbers: [1, 2, 3, 4, 4, 5, 6, 7, 8, 9]
Divide o array em dois subarrays menores. Chama a si mesma recursivamente para ordenar os subarrays. Combina os subarrays ordenados usando a função merge.
Recebe dois arrays ordenados como entrada. Compara os elementos de ambos os arrays e adiciona o menor elemento ao array resultante. Adiciona os elementos restantes de ambos os arrays ao array resultante.
Define o array de números aleatórios. Chama a função mergeSort para ordenar o array. Imprime o array original e o array ordenado.
Ideal para grandes conjuntos de dados devido à sua complexidade de tempo eficiente.
Funciona bem em dados que não cabem na memória principal, pois pode ser implementado para trabalhar com dados externos.
Requer espaço adicional proporcional ao tamanho do array, o que pode ser uma desvantagem em sistemas com memória limitada.