📜  c# shuffle array - C# (1)

📅  最后修改于: 2023-12-03 14:59:40.851000             🧑  作者: Mango

C# Shuffle Array

在C#中,我们可以使用 Random 类和 Fisher-Yates 洗牌算法来轻松地打乱一个数组。本文将向您演示如何使用 Fisher-Yates 洗牌算法在C#中打乱一个数组。

Fisher-Yates 洗牌算法简介

Fisher-Yates 洗牌算法,也称为 Knuth 洗牌算法,是一种常见的用于随机打乱数组的算法。它基于以下思路:

  1. 从数组中的最后一个元素开始,依次向前遍历每个元素。
  2. 对于当前遍历到的元素,生成一个随机索引,该索引在当前元素及其前面的元素中随机选择。
  3. 将当前元素和随机索引处的元素进行交换。

重复执行步骤2和步骤3,直到数组的第一个元素。

打乱数组

现在,我们将使用 C# 中的 Random 类和 Fisher-Yates 洗牌算法来打乱一个整数数组:

int[] numbers = { 1, 2, 3, 4, 5 };
Random random = new Random();
for (int i = numbers.Length - 1; i > 0; i--)
{
    int j = random.Next(i + 1);
    int temp = numbers[i];
    numbers[i] = numbers[j];
    numbers[j] = temp;
}

如上代码中显示的,我们首先定义整数数组 numbersRandom 类的实例 random。接着,我们使用 for 循环从最后一个元素开始遍历数组。

在循环中,我们将当前遍历到的元素和随机索引处的元素交换。我们使用 Random.Next() 方法生成一个介于 0 和(当前遍历的元素加 1)之间的随机整数。最后,我们将循环继续向前遍历数组,直到第一个元素。

经过这个操作后,我们将得到一个随机排序后的整数数组。

结论

在 C# 中打乱一个数组的方法很简单,只需要使用 Fisher-Yates 洗牌算法和 Random 类的实例就可以了。变换算法可以用于玩牌游戏,碰巧生成测试数据等等。

Ps: 以上代码片段说明可复制到你的项目中。