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

Tutoriales básicos de Java

Control de flujo Java

Java Arreglo

Java Orientado a Objetos(I)

Java Orientado a Objetos(II)

Java Orientado a Objetos(III)

Manejo de excepciones en Java

Java Lista(Lista)

Java Queue(Cola)

conjuntos de Java Map

conjuntos de Java

Java entrada/salida (I/O)

Reader de Java/Writer

otros temas de Java

implementación del algoritmo de ordenamiento por merger en Java

Java Ejemplos Completos

en este ejemplo, aprenderemos a ejecutar el algoritmo de ordenamiento por merger en Java.

antes de aprender el algoritmo de ordenamiento por merger en Java, asegúrate de entender el principio de funcionamiento del algoritmo de ordenamiento por merger.

ejemplo: programa Java para implementar el algoritmo de ordenamiento por merger

import java.util.Arrays;
//ordenamiento por merger en Java
class Main {
  //combinar los subarreglos L y M en el 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];
    //llenar los arreglos izquierdo y derecho
    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];
     }
    //mantener el índice actual de los subarreglos y el array principal
    int i, j, k;
    i = 0;
    j = 0;
    k = p;
    //hasta que alcanzamos el extremo de L o M, seleccionando el mayor
    //elementos L y M, y ponerlos en la posición correcta en A[p..r].
    //ordenamiento descendente
    //usar if(L[i] >= <[j])
    while (i < n1 && j < n2) {
      if (L[i] <= M[j]) {
        array[k] = L[i];
        i++;
      } else {
        array[k] = M[j];
        j++;
      }
      k++;
    }
    // cuando se agote un elemento de L o M
    // colocar el resto de elementos en A[p..r]
    while (i < n1) {
      array[k] = L[i];
      i++;
      k++;
    }
    while (j < n2) {
      array[k] = M[j];
      j++;
      k++;
    }
  }
  // dividir el array en dos subarreglos, ordenarlos y combinarlos
  void mergeSort(int array[], int left, int right) {
    if (left < right) {
      //m es el punto en el que el array se divide en dos subarreglos
      int mid = (left + right) / 2;
      //la llamada recursiva para cada subarreglo
      mergeSort(array, left, mid);
      mergeSort(array, mid + 1, right);
      //Combinar subarrays ya ordenados
      merge(array, left, mid, right);
    }
  }
  public static void main(String args[]) {
    //Crear un array no ordenado
    int[] array = { 6, 5, 12, 10, 9, 1 };
    Main ob = new Main();
    //Llamar al método mergeSort()
    //Enviar parámetros: array, primer índice y último índice
    ob.mergeSort(array, 0, array.length - 1);
    System.out.println("Array ordenado:");
    System.out.println(Arrays.toString(array));
  }
}

Salida1

Array desordenado:
[6, 5, 12, 10, 9, 1]
Array ordenado:
[1, 5, 6, 9, 10, 12]

Aquí, los elementos del array están ordenados en orden ascendente. Si se desea ordenar los elementos en orden descendente, se puede cambiar el código dentro del primer bucle while del método merge():

Cambiar el menor por mayor
if (L[i] >= M[j]) {

Java Ejemplos Completos