Algoritmo de Fisher-Yates para embaralhamento de arrays

Raul Esteves
2 min readJul 3, 2018

Neste artigo falarei sobre o algoritmo de Fisher-Yates e sua implementação para o embaralhamento de arrays.

Esses dias brincando com Javascript resolvi fazer um jogo da memória. Fiz um array de números, tendo cada número seu par. Por ex:
var cartas = [1, 1, 2, 2, 3, 3, 4, 4]

Coloquei cada número dentro de um <td> na table e estava pronto. Porém pro jogo fazer sentido a cada partida as cartas deveriam mudar de lugar. Ok, basta embaralhar o array. Se temos o método sort() que ordena, basta procurarmos o método que desordena, certo? Errado. Não existe esse método :(

Mas tudo bem, se não temos, criamos. E é aí que entra o algoritmo.
Vamos a ele:

Show, e o que esta acontecendo?

Recebemos o array como parâmetro e entramos em um laço. O for se iniciará com o tamanho do array e irá decrementando em 1 até que itere tantas vezes quanto o array tiver de tamanho.
Será gerado um valor aleatório para a constante j e será usado como índice para as atribuições que ocorrem a seguir. O valor do indice i vai para o indice j e vice versa.
Vamos então ver como ficaria no jogo da memória, sempre que é clicado em Start o algoritmo é chamado e o array se embaralha:

Jogo da memória

Pra quem tiver interesse, o código do jogo da memória se encontra no meu gitHub, só clicar aqui.

Curtiu o artigo? Então esmaga a palminha /o/
E é isso, foi curto mas achei uma curiosidade bem bacana. Espero que tenham gostado e até a próxima!

--

--