洗牌一副扑克牌

时间:2010-11-02 06:36:51

标签: c++ algorithm boost shuffle

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

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

3 个答案:

答案 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)