可能重复: 这是Fisher-Yates洗牌的C实现正确吗?
为了在我的应用程序中模拟不同顺序的输入序列,我想为数组输入生成一个随机序列列表。例如,给定一个arr10,默认的序列是0,1,..,8,9,但是,我想将序列操作成随机顺序,例如,2,4,5,1,9,0,3,7,8,6。
我认为rand()会在0-9之间生成一个随机值,但它不能保证每个元素至少生成一次。在这种情况下,我正在考虑下面的伪,但是否有更好的方法产生随机输入序列,并确保在给定范围内的每个数字至少产生一次?
round #1:
generate a random number within 0-9.
let say 2 is selected
round #2:
generate a random number within 0-1
generate a random number within 3-9
let say 0 and 4 are selected
round #3:
generate a random number within 1
generate a random number within 3
generate a random number within 5-9
let say 1, 3, 7 are selected
round #4:
generate a random number within 5-6
generate a random number within 8-9
continue until 10 numbers are selected发布于 2012-07-13 07:35:16
查看费舍-耶茨洗牌算法这里以满足您的需求。
发布于 2012-07-13 07:34:32
以下是另一种方法:
最后,数组将包含原始值的随机排列,这正是您想要的。
https://stackoverflow.com/questions/11466008
复制相似问题