洗牌一副扑克牌

oad*_*ams 12 c++ algorithm boost shuffle

我正在为C++程序制作一个Deck类.它需要有两种方法:一种是从牌组顶部弹出一张牌,另一种是将牌组洗牌.我关心后者.

卡片表示为整数1到52(包括1和52).什么是最快的洗牌方法(假设'良好'的随机性水平)?

Amb*_*ber 26

如果你想自己实现shuffle,一个非常简单但功能性的改组算法:Fisher-Yates shuffle.

要改组n个元素的数组:

for i from n ? 1 downto 1 do
   j ? random integer with 0 ? j ? i
   exchange a[j] and a[i]
Run Code Online (Sandbox Code Playgroud)

当然,C++标准库也为您实现了这样的事情,例如std::random_shuffle,通过<algorithm>标题包含.


Jam*_*lis 8

使用std::random_shuffle洗牌.