Aria

Losowe sortowanie tablicy (Java)

Mamy tablicę:

static final String[] IMIONA = {"Aria", "Bemol", "Gawot", "Menuet", "Misio", "Nutka", "Ochłapek", "Pauza", "Skirli", "Suita"};

Chcemy ja posortować (wymieszać) losowo.

Użyjemy trzech metod – u mnie są w klasie ArrayUtil:

 /**
     * miesza losowo elementy tablicy     *
     * @param tablica T[] - tablica do wymieszania
     * @param prec - im wyższa liczba tym więcej operacji zamiany elementów miejscami
     */
    static <T> void shuffleArray(T[] tablica, int prec) {
        int len = tablica.length;
        for (int i = 0; i < prec * len; i++) {
            int one = randomInRange(0, len - 1);
            int two = randomInRange(0, len - 1);
            T temp = tablica[one];
            tablica[one] = tablica[two];
            tablica[two] = temp;
        }
    }

    /**
     * Podaje losową liczbę z przedziału zamkniętego <min, max>     *
     * @param min int - najmniejsza wartość
     * @param max int - największa wartość
     * @return int - wylosowana wartość z podanego zakresu, z uwzględniem min i
     * max
     */
    public static int randomInRange(int min, int max) {
        int random = -1;
        if (min > max) {
            System.out.println("pierwsza liczba musi byc mniejsza od drugiej");
        } else {
            random = (int) (Math.floor(Math.random() * (max - min + 1)) + min);
        }
        return random;
    }

    /**
     * Drukuje na konsoli w linii tablicę obiektów ujętą w klamry "[" "]".     *
     * @param array - tablicz obiektów do wydruku
     */
    public static <T> void print(T[] array) {
        System.out.print("[");
        for (int i = 0; i < array.length; i++) {
            if (i == array.length - 1) {
                System.out.print(array[i]);
            } else {
                System.out.print(array[i] + ", ");
            }
        }
        System.out.print("]");
        System.out.println();
    }

Wykonujemy mieszanie – ciagle mamy do czynienia z tą samą tablicą:

 ArrayUtil.shuffleArray(IMIONA, 3);
 ArrayUtil.print(IMIONA);

Na konsoli zobaczymy wymieszaną tablicę. elementy ułożone są losowo:

[Gawot, Bemol, Pauza, Nutka, Suita, Skirli, Menuet, Aria, Misio, Ochłapek]