有人要求我分配一个使用FisherYates shuffle的任务,这个任务是使用函数从一个文件(我设法做到了)中获取的数组。

 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;
}

它基本上只需要洗牌播放器列表并返回输出,这样我就可以在main()中打印出来。
如果有人能告诉我如何修改代码使其工作,我将非常感激,因为使用这个版本,我在编译时会得到一个错误:
 invalid conversion from 'int*' to 'int' [-fpermissive]

最佳答案

您已经在player中得到了结果,因此返回void应该可以工作。
Reference for 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;
     }
}

关于c - C语言中的Fisher Yates改组算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42321370/

10-09 13:26