Como embaralhar um Array?

2 respostas
C

ola pessoal!!!

preciso embaralhar uma array tipo “numerico” para que a ordem dos elementos da array seja sempre diferente a cada clique no botão.

ja fiz o seguinte:

public byte numeros[] = new byte[] {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};

Arrays.sort(numeros);

e agora ??? assim continuaezibindo esta mesma ordem, acho q o sort eh para deichar na ordem crescente, pergunto existe um metodo que apenas embaralha aleatoriamente ???

Como posso resolver meu problema ??

Obrigado

2 Respostas

F

se puder trabalhar com objetos de uma olhada em “Collections.shuffle”,

senao implemente um metodo que gera numeros inteiros randomicos(na faixa de valores limite do seu array), onde esses numeros seriam o indice do seu array, depois vc vai obtendo o numero q ta nessa posicao e colocando no novo array.

W

segue um metodo para embaralhar um vetor com complexidade de pior caso de O(n)

/**
     * 
     * @param array - vetor de int[]
     * @param seed - semente para função 
     */
    static void shuffle(int array[], long seed) {
        int index;
        // Shuffle array
        for (int i= array.length; i>1; i--){
            index = (int) Math.abs( seed % i );
            //swap
            int tmp = array[i-1];
            array[i-1] = array[index];
            array[index] = tmp;
        }
    }
Criado 26 de julho de 2005
Ultima resposta 26 de jul. de 2005
Respostas 2
Participantes 3