Algorithme de shuffling de Fisher Yates en C

On m’a demandé une affectation pour utiliser FisherYates shuffle sur un tableau à extraire d’un fichier (que j’ai réussi à faire) à l’aide de fonctions.

int FisherYates(int *player, int n) { //implementation of Fisher int i, j, tmp; // create local variables to hold values for shuffle for (i = n - 1; i > 0; i--) { // for loop to shuffle j = rand(); //randomise j for shuffle with Fisher Yates tmp = player[j]; player[j] = player[i]; player[i] = tmp; } return player; } 

Il suffit simplement de mélanger la liste des joueurs et de me renvoyer la sortie pour que je puisse l’imprimer dans main ().

J’apprécierais beaucoup si quelqu’un pouvait me montrer comment modifier le code pour le faire fonctionner, car avec cette version, j’obtiens une erreur lors de la compilation:

  invalid conversion from 'int*' to 'int' [-fpermissive] 

Vous avez déjà le résultat dans le player , donc retourner le void devrait fonctionner.

Référence pour Fisher-Yates

 void FisherYates(int *player, int n) { //implementation of Fisher int i, j, tmp; // create local variables to hold values for shuffle for (i = n - 1; i > 0; i--) { // for loop to shuffle j = rand() % (i + 1); //randomise j for shuffle with Fisher Yates tmp = player[j]; player[j] = player[i]; player[i] = tmp; } } 

Deux choses rapides à propos de votre fonction:

1) rand() nécessite que srand (…) soit appelé pour créer le générateur de nombres.

  ... srand(clock()); for (i=n-1; i>0; i--){ // for loop to shuffle j = rand()%n; //randomise j for shuffle with Fisher Yates ... 

2) int FisherYates(int *player, int n) est prototypé pour renvoyer un int , mais vous retournez le pointer to int arguments), ou modifiez la fonction pour renvoyer un int * . Mais cela serait redondant car cela fait déjà partie des arguments.