Skip to content

Instantly share code, notes, and snippets.

@eemr3
Created August 4, 2021 17:01
Show Gist options
  • Save eemr3/b9b5bf64f0d002888d62bb80757f4782 to your computer and use it in GitHub Desktop.
Save eemr3/b9b5bf64f0d002888d62bb80757f4782 to your computer and use it in GitHub Desktop.
Mostrar elementos de um array em ordem aleatória
Análise
Seu código apresenta muitos erros e não condiz com o que é proposto na pergunta, o que pode ser definido em passos:
1. Coletar os dados
2. Embaralhar os dados
3. Exibir os dados
O primeiro passo seu código conseguiu concluir com êxito, mas os dois últimos não. A função gerar(fim) não possui utilidade. Houve desatenção entre o declarar e o utilizar da variável k.
Solução
Ao meu ver a solução é aproveitar o que você fez no primeiro passo, coletar os dados e implementar os outros dois passos: embaralhar os dados e exibir os dados.
Embaralhar os dados
Para embaralhar um array deve-se utilizar o algoritmo de embaralhamento de Fisher-Yates. Esse algorítimo foi descrito em 1938 por Ronald Fisher e Frank Yates em seu trabalho Statistical tables for biological, agricultural and medical research(Tabelas estatísticas para pesquisa biológica, agrícola e médica).
O embaralhamento de Fisher-Yates é um algoritmo que gera uma permutação aleatória de uma seqüência finita - em termos simples, o algoritmo embaralha a sequência. O algoritmo funciona como se colocasse todos os elementos em um chapéu, ele determina continuamente o próximo elemento tirando aleatoriamente um elemento do chapéu até que nenhum elemento permaneça.
O algoritmo produz uma permutação imparcial: toda permutação é igualmente provável. A versão moderna do algoritmo é eficiente: leva tempo proporcional ao número de itens embaralhados e embaralha-os no lugar.
O algoritmo é bem simples:
- Para embaralhar uma matriz a[] de n elementos (índices 0..n-1):
faça :i de n − 1 decrescer para 1
atribua :j ← inteiro aleatório tal que 0 ≤ j ≤ i
trocar a[j] com a[i]
fim faça
Exibir os dados
Para exibir os dados vou usar o método Console.log() que exibe uma mensagem no console do navegador aliado ao método Array.Join() que junta todos os elementos de uma array em uma string.
Resposta
//Coleta de dados aproveitada e simplificada a partir do seu código
numeroPessoas = window.prompt("Digite um numero de pessoas");
var vetor = new Array();
for (i = 0 ; i < numeroPessoas; i++){
vetor.push(window.prompt("Digite o nome"));
}
//Exibição dos dados
console.log('Número de pressoas:' + vetor.length + "\n");
console.log('Entrada:' + vetor.join("-") + "\n");
console.log('Embaralhado:' + embaralhar(vetor).join("-") + "\n");
// Algoritmo de embaralhamento de Fisher–Yates
function embaralhar(array) {
for (var i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment