洗牌算法C#
时间: 2023-07-12 09:20:00 浏览: 58
当需要在一定范围内生成不同的随机数时,可以使用洗牌算法来实现。以下是一个使用 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`。
python洗牌算法
洗牌算法是一种用于随机打乱数组或列表顺序的算法。在Python中,我们可以通过多种方式实现洗牌算法。
一种常见的实现方法是使用random模块的shuffle函数,它可以对列表进行原地随机排序。示例如下:
```python
import random
def shuffle_list(lst):
random.shuffle(lst)
return lst
```
上述代码首先导入了random模块,然后定义了一个名为`shuffle_list`的函数,该函数接受一个列表作为参数,并在函数内部调用了random模块的shuffle函数对列表进行随机排序。最后返回打乱后的列表。
另一种实现洗牌算法的方法是使用random模块的sample函数,该函数可以从列表中随机选择一定数量的元素,并返回一个新的列表,示例如下:
```python
import random
def shuffle_list(lst):
shuffled_lst = random.sample(lst, len(lst))
return shuffled_lst
```
上述代码首先导入了random模块,然后定义了一个名为`shuffle_list`的函数,该函数接受一个列表作为参数,并在函数内部调用了random模块的sample函数,从列表中随机选择了与原列表长度相同数量的元素,并将它们组成一个新的列表返回。
以上是两种常见的Python洗牌算法的实现方法,它们都可以实现对列表顺序的随机打乱。