C#洗牌算法生成不重复的数字
时间: 2023-08-02 21:26:31 浏览: 49
可以使用Fisher-Yates随机置换算法来实现C#洗牌算法生成不重复的数字,具体实现如下:
```csharp
public static int[] Shuffle(int[] arr)
{
Random rand = new Random();
for (int i = arr.Length - 1; i > 0; i--)
{
int j = rand.Next(i + 1);
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
return arr;
}
```
这个算法的思路是,从数组的最后一个元素开始,随机选择一个元素与之交换,然后再从剩下的元素中选择一个元素与之交换,以此类推,直到整个数组都被遍历过一遍。这样就可以生成一个随机的、不重复的数组。
相关问题
洗牌算法C#
当需要在一定范围内生成不同的随机数时,可以使用洗牌算法来实现。以下是一个使用 C# 实现的洗牌算法:
```csharp
public static void Shuffle(int[] arr)
{
Random rng = new Random();
int n = arr.Length;
while (n > 1)
{
n--;
int k = rng.Next(n + 1);
int temp = arr[k];
arr[k] = arr[n];
arr[n] = temp;
}
}
```
该方法接收一个整数数组作为参数,然后使用 Random 类生成一个随机数生成器。接着,循环遍历数组,每次从数组中剩余的数字中随机选择一个数字,然后将该数字与数组中最后一个数字交换位置。最后,返回一个随机排序后的数组。
使用示例:
```csharp
int[] arr = { 1, 2, 3, 4, 5 };
Shuffle(arr);
foreach (int i in arr)
{
Console.Write(i + " ");
}
```
输出结果:
```
5 2 1 3 4
```
希望这个示例能够对你有所帮助!
洗牌算法源码 C#
以下是C#实现Fisher-Yates算法的洗牌算法的示例代码:
```csharp
using System;
public class ShuffleAlgorithm
{
// 执行洗牌算法
public static void Shuffle<T>(T[] array)
{
Random rng = new Random();
int n = array.Length;
while (n > 1)
{
n--;
int k = rng.Next(n + 1);
T temp = array[k];
array[k] = array[n];
array[n] = temp;
}
}
}
// 示例用法
int[] array = new int[] { 1, 2, 3, 4, 5 };
ShuffleAlgorithm.Shuffle(array);
foreach (int i in array)
{
Console.Write("{0} ", i);
}
```
这段代码中,我们定义了一个 `ShuffleAlgorithm` 类,其中包含一个 `Shuffle` 方法,接受一个数组参数,并使用 Fisher-Yates算法 随机打乱数组元素的顺序。在使用时,我们可以调用该方法,并传递需要打乱顺序的数组作为参数,例如示例代码中的整型数组 `array`。