C 如何将字符序列随机化?

C 如何将字符序列随机化?,c,random,sequence,shuffle,C,Random,Sequence,Shuffle,我想写一个函数,它将字母序列的顺序随机化。例如,序列: A B C D E F G …可能更改为: Z L T A p …如果再次传递给同一函数,可能会导致: H R E I C 有什么建议吗?这听起来像是家庭作业,但无论如何: 你的意思是随机排列字母表?几天前我用PHP写了一些类似的东西。逻辑如下: 设S1为包含字母字符“ABC…XYZ”的字符串 设S2为空字符串 当strlen(S1)>0时,从S1中选择一个随机字符C。将C附加到S2并从S1中删除C 返回S2 结果是一组随机洗牌的字符,以最

我想写一个函数,它将字母序列的顺序随机化。例如,序列:

A B C D E F G

…可能更改为:

Z L T A p

…如果再次传递给同一函数,可能会导致:

H R E I C


有什么建议吗?

这听起来像是家庭作业,但无论如何:


你的意思是随机排列字母表?几天前我用PHP写了一些类似的东西。逻辑如下:

  • 设S1为包含字母字符“ABC…XYZ”的字符串
  • 设S2为空字符串
  • 当strlen(S1)>0时,从S1中选择一个随机字符C。将C附加到S2并从S1中删除C
  • 返回S2

  • 结果是一组随机洗牌的字符,以最小的CPU负载创建(如果字符串有26个字符,则内部循环只需要26次迭代)。

    看看算法,特别是它的性能。

    你说的“没有逻辑”是什么意思?请看:我一直想知道这样做只有n次,其中n是数组的大小,只是看起来随机性不够。是的,这个特定的算法可能不适合小数组。但是,人类对“随机”的定义明显不同于宇宙,所以YMMV:)(我想找一篇我最近读过的关于这个主题的文章,但到目前为止都没有用。)你的文章不是最好的方式,因为算法依赖于随机()function@gcc:您已经用Fisher-Yates算法接受了答案。它以什么方式不依赖于random()函数?您的算法可能会失败,因为在某个时刻,函数会向您发送相同的alphabe,您如何理解旧的alphabe没有更改?抱歉,回复这么晚。它输出未更改字符串的几率为1:40329146112606056584000000。我甚至不知道这么大的数字怎么叫。您可以放心地假设,即使您的计算机以每秒10亿次的速度不断生成此字符串的新随机排列,您也永远不会在CPU的整个生命周期中找到重复项。以这种速度,假设排列永远不会重复,计算机仍然需要连续运行12779535234年(如果我的代数没有关闭的话)来耗尽可能性。