洗牌算法是随机打乱一组数据的算法。常用的洗牌算法有随机置换算法和Fisher-Yates算法。随机置换算法是在数组中随机交换元素的位置,而Fisher-Yates算法是从数组的末尾向前遍历,并在遍历过程中与随机位置交换元素。
以下是 Python 中实现 Fisher-Yates 算法的代码:
import random
def shuffle(arr):
for i in range(len(arr) - 1, 0, -1):
j = random.randint(0, i)
arr[i], arr[j] = arr[j], arr[i]
return arr
# Example usage:
deck_of_cards = list(range(1, 53))
shuffled_deck = shuffle(deck_of_cards)
print(shuffled_deck)
这段代码使用了 Python 的 random 库来生成随机数,并在循环中使用 Fisher-Yates 算法来随机打乱数组中的元素。这段代码将一个由整数 1 到 52 组成的数组 (比如一副扑克牌) 打乱顺序。
以下是 C# 中实现洗牌算法的代码:
using System;
using System.Linq;
class Shuffle
{
static Random rng = new Random();
public static void ShuffleList(IList list)
{
int n = list.Count;
while (n > 1)
{
n--;
int k = rng.Next(n + 1);
T value = list[k];
list[k] = list[n];
list[n] = value;
}
}
static void Main()
{
List<int> deck = Enumerable.Range(1, 52).ToList();
ShuffleList(deck);
foreach (int card in deck)
Console.WriteLine(card);
}
}
这段代码使用了 System.Random 类来生成随机数,并在循环中使用 Fisher-Yates 算法来随机打乱数组中的元素。这段代码将一个由整数 1 到 52 组成的数组 (比如一副扑克牌) 打乱顺序。
注意:上面代码中,ShuffleList 方法是一个泛型方法,它可以接受任何类型的 IList 实例作为参数。