假设我们要编写一个方法来产生一副洗牌的纸牌。现在让它变得非常简单,忽略花色,所以我们有 52 张牌。
一种算法是:
- 填充一个包含 52 个元素的数组,其中第一个元素为 1,第二个元素为 2,依此类推。
- 编写一个迭代 X 次的 for 循环,在每次迭代期间,随机选择两张牌并交换它们。
- X 越大,洗牌越随机。
另一种算法:
- 像以前一样填充数组。
- 编写一个迭代 26 次的 for 循环,并在每次迭代期间选择两个随机数并将这两个数字放在另一个 52 元素数组的连续前面,该数组存储新选择的数字。
- 在每次迭代中,从原始数组中删除添加到新数组中的两张卡片。
我知道有更好的洗牌算法,但是关于这两个,哪一个更好,为什么?