Nesta dinamica, vamos implementar o algoritmo de Fisher-Yates, um dos mais simples e eficientes para esta tarefa, para desordenar um vetor de inteiros.
O algoritmo é bom, mas desse jeito é mais estiloso
Etapa 1
Crie uma rotina que, ao usuário entrar com um número N, gere um vetor V de 1 até N. Por exemplo, se N = 8, V = [1, 2, 3, 4, 5, 6, 7, 8] . Isso já foi feito na Dinamica 001.
Etapa 2
Gere um número aleatorio K de 0 até N - 1 e faça a troca do último elemento do vetor V para a posição K, e o elemento da posição K para a última posição.
Por exemplo, se V = [1, 2, 3, 4] e K = 1, após a rotina será V = [1, 4, 3, 2]
Etapa 3
Coloque a troca feita na etapa anterior numa estrutura de repetição, e decremente a posição do último vetor, para que a troca seja feita e todos os elementos do vetor.
Por exemplo, se N = 5, V = [1, 2, 3, 4, 5].
No passo 1, se K = 2 V = [1, 2, 5,4, 3]
No passo 2, se K = 0, V = [4, 2, 5, 1, 3]
e assim por diante
Etapa 4
Finalmente crie o programa completo em C que una as etapas anteriores. Lembre-se de imprimir na tela o vetor original e o embaralhado.
Nenhum comentário:
Postar um comentário