English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste exemplo, vamos aprender a executar o algoritmo de ordenação por merge em Java.
Antes de aprender o algoritmo de ordenação por merge em Java, certifique-se de que você entende o funcionamento do algoritmo de ordenação por merge.
import java.util.Arrays; //Ordenação por merge em Java class Main { //mesclar os subarrays L e M no array void merge(int array[], int p, int q, int r) { int n1 = q - p + 1; int n2 = r - q; int L[] = new int[n1]; int M[] = new int[n2]; //preencher os arrays esquerdo e direito for (int i = 0; i < n1; i++{ L[i] = array[p + i]; } for (int j = 0; j < n2; j++{ M[j] = array[q + 1 + j]; } //manter os índices atuais dos subarrays e do array principal int i, j, k; i = 0; j = 0; k = p; //até que能达到L ou M de qualquer lado, escolhendo o maior //os elementos L e M, e coloca-los na posição correta no A[p..r]. //ordenação decrescente //usar if(L[i] >= <[j]) enquanto (i < n1 && j < n2) { if (L[i] <= M[j]) { array[k] = L[i]; i++; } else { array[k] = M[j]; j++; } k++; } // quando os elementos de L ou M estiverem esgotados // colocar os elementos restantes no A[p..r] enquanto (i < n1) { array[k] = L[i]; i++; k++; } enquanto (j < n2) { array[k] = M[j]; j++; k++; } } // dividir o array em dois subarrays, ordená-los e mesclá-los void mergeSort(int array[], int esquerda, int direita) { if (esquerda < direita) { //m é o ponto onde o array é dividido em dois subarrays int meio = (esquerda + direita) / 2; //chamada recursiva para cada subarray mergeSort(array, esquerda, meio); mergeSort(array, à direita); + 1, à direita); //Mesclar subarrays já ordenados merge(array, left, mid, right); } } public static void main(String args[]) { //Criar um array não ordenado int[] array = { 6, 5, 12, 10, 9, 1 }; Main ob = new Main(); //Chamar método mergeSort() //Passar parâmetros: array, o primeiro índice e o último índice ob.mergeSort(array, 0, array.length - 1); System.out.println("Array ordenado:"); System.out.println(Arrays.toString(array)); } }
Saída1
Array não ordenado: [6, 5, 12, 10, 9, 1] Array ordenado: [1, 5, 6, 9, 10, 12]
Aqui, os elementos do array estão ordenados em ordem crescente. Se desejar ordenar os elementos em ordem decrescente, você pode alterar o código dentro do primeiro loop while do método merge():
Substitua o sinal de menos por maior if (L[i] >= M[j]) {