Tarea 1: Convertir el algoritmo Merge a Java - psyepez2005/Analisis_De_Algoritmos GitHub Wiki

Método

Después de adaptar el método para que funcione con los índices que 0 que es como funciona java, el método queda de esta forma:

public static int[] merge(int[] A, int p, int q, int r) {
    int nl = q - p + 1;
    int nr = r - q;
    int[] L = new int[nl];
    int[] R = new int[nr];

    for (int i = 0; i < nl; i++) {
        L[i] = A[p + i - 1];
    }
   
    for (int j = 0; j < nr; j++) {
        R[j] = A[q + j];
    }

    int i = 0;
    int j = 0;
    int k = p;

    while (i < nl && j < nr) {
        if (L[i] <= R[j]) {
            A[k - 1] = L[i];
            i++;
        } else {
            A[k - 1] = R[j];
            j++;
        }
        k++;
    }

    while (i < nl) {
        A[k - 1] = L[i];
        i++;
        k++;
    }
    while (j < nr) {
        A[k] = R[j];
        j++;
        k++;
    }
    return A;
}

LLamada:

Para probarlo, utilice el mismo ejemplo realizado en clases

public static void main(String[] args) {
        int[] A = {10,9,8,5,4,3};
        System.out.println("ANTES: ");
        for (int i = 0; i < A.length; i++) {
            System.out.println(A[i]);
        }
        int p = 1;
        int r = A.length;
        int q = r/2;

        A = merge(A,p,q,r);
        System.out.println("DESPUES: ");
        for (int i = 0; i < A.length; i++) {
            System.out.println(A[i]);
        }
    }

Salida:

run: ANTES: 10 9 8 5 4 3 DESPUES: 5 4 3 10 9 8 BUILD SUCCESSFUL (total time: 0 seconds)