Created
August 4, 2021 17:01
-
-
Save eemr3/b9b5bf64f0d002888d62bb80757f4782 to your computer and use it in GitHub Desktop.
Mostrar elementos de um array em ordem aleatória
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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