我正在为C ++程序制作一个Deck类。它需要有两种方法:一种是从牌组顶部弹出一张牌,另一种是将牌组洗牌。我很关心后者。
卡表示为整数1到52(包括1和52)。什么是最快的洗牌方法(假设'良好'的随机性水平)?
答案 0 :(得分: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]
当然,C ++标准库也为您实现了这样的事情,例如std::random_shuffle
,通过<algorithm>
标题包含。
答案 1 :(得分:8)
使用std::random_shuffle
洗牌。
答案 2 :(得分:4)
的std :: random_shuffle
http://www.cplusplus.com/reference/algorithm/random_shuffle/