English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial Básico de Java

Controle de Fluxo Java

Java Array

Java Orientação a Objetos (I)

Java Orientação a Objetos (II)

Java Orientação a Objetos (III)

Tratamento de Exceções Java

Java Lista (List)

Java Queue (Fila)

Mapas do Java

Conjuntos do Java

Entrada e saída do Java (I/O)

Reader do Java/Writer

Outros tópicos do Java

Implementação do algoritmo de ordenação por merge em Java

Exemplos Java completos

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.

Exemplo: Implementação de algoritmo de ordenação por merge em Java

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]) {

Exemplos Java completos