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 + " ");
}
}
}
