public class Mezcla {

    final int TAMAÑO;
    final int[] ORIGINAL;

    public Mezcla(int tamaño) {
        TAMAÑO = tamaño;
        ORIGINAL = new int[TAMAÑO];
        System.out.println("Conjunto de " + TAMAÑO + " cartas.");
        for (int i = 0; i < TAMAÑO; i++) {
            ORIGINAL[i] = i + 1;
        }
        mezclar(ORIGINAL, 1);
    }

    public void mezclar(int[] mazo, int n) {
        System.out.println("Vuelta número " + n);
        int mitad = mazo.length / 2;
        int[] mitadPri = java.util.Arrays.copyOfRange(mazo, 0, mitad);
        int[] mitadSeg = java.util.Arrays.copyOfRange(mazo, mitad, mazo.length);
        System.out.println("Primera mitad: " + java.util.Arrays.toString(mitadPri));
        System.out.println("Segunda mitad: " + java.util.Arrays.toString(mitadSeg));
        mazo = juntaVectores(mitadPri, mitadSeg);
        System.out.println("Mazo mezclado: " + java.util.Arrays.toString(mazo));
        System.out.println();

        if (java.util.Arrays.equals(mazo, ORIGINAL)) {
            System.out.println("Se ha vuelto al origen en " + n + " mezclas");
        } else {
            mezclar(mazo, n + 1);
        }

    }

    public int[] juntaVectores(int[] pri, int[] seg) {
        int tamaño = pri.length + seg.length;
        int total[] = new int[tamaño];
        int p, s = 0;
        p = 0;
        for (int i = 1; i <= tamaño; i++) {
            if (i % 2 != 0) {
                total[i - 1] = pri[p];
                p++;
            } else {
                total[i - 1] = seg[s];
                s++;
            }
        }
        return total;
    }

    public static void main(String[] Args) {
       
        Mezcla m = new Mezcla(Integer.parseInt(Args[0]));
    }
}
