SEMANA_4_EJ - Carlos2190/ANALISIS-DE-ALGORITMOS GitHub Wiki

public class MergeSort {
    
    // Método para fusionar dos subarreglos
    public static void merge(int[] A, int p, int q, int r) {
        int nL = q - p + 1; // Longitud del subarreglo izquierdo
        int nR = r - q;      // Longitud del subarreglo derecho
        
        // Crear arreglos temporales
        int[] L = new int[nL];
        int[] R = new int[nR];
        
        // Copiar los elementos a los arreglos temporales
        for (int i = 0; i < nL; i++) {
            L[i] = A[p + i]; // Copiar A[p:q] a L
        }
        for (int j = 0; j < nR; j++) {
            R[j] = A[q + 1 + j]; // Copiar A[q+1:r] a R
        }
        
        // Índices para L, R y A
        int i = 0, j = 0, k = p;
        
        // Fusionar los arreglos temporales de nuevo en A
        while (i < nL && j < nR) {
            if (L[i] <= R[j]) {
                A[k] = L[i];
                i++;
            } else {
                A[k] = R[j];
                j++;
            }
            k++;
        }
        
        // Copiar los elementos restantes de L, si hay
        while (i < nL) {
            A[k] = L[i];
            i++;
            k++;
        }
        
        // Copiar los elementos restantes de R, si hay
        while (j < nR) {
            A[k] = R[j];
            j++;
            k++;
        }
    }

    // Método para realizar Merge Sort
    public static void mergeSort(int[] A, int left, int right) {
        if (left < right) {
            int mid = (left + right) / 2; // Encontrar el punto medio
            
            // Llamadas recursivas para dividir
            mergeSort(A, left, mid);
            mergeSort(A, mid + 1, right);
            
            // Fusionar las dos mitades
            merge(A, left, mid, right);
        }
    }

    public static void main(String[] args) {
        int[] array = {38, 27, 43, 3, 9, 82, 10};
        System.out.println("Array original:");
        for (int num : array) {
            System.out.print(num + " ");
        }
        
        // Aplicar Merge Sort
        mergeSort(array, 0, array.length - 1);
        
        System.out.println("\nArray ordenado:");
        for (int num : array) {
       
     System.out.print(num + " ");
        }
    }
}

Ej