c# - n个连续整数的随机排列

标签 c# algorithm

<分区>

Possible Duplicate:
Is using Random and OrderBy a good shuffle algorithm?

给定一个从0开始的n个连续数的整数数组,即

0,1,2,..n

我想随机生成一个数字的排列,

说给定

0,1,2,3

一个可能的是 3,1,2,0

如何轻松实现?

最佳答案

首先创建一个所需大小的整数数组,并用递增的连续数字填充它;

int n = 10;
int[] array = new int[n + 1];
for (int i = 0; i <= n; i++)
{
    array[i] = i;
}
Shuffle(array);

你可以使用 Knuth/Fisher–Yates 洗牌

/// <summary>
/// Knuth shuffle
/// </summary>        
public void Shuffle(int[] array)
{
    Random random = new Random();
    int n = array.Count();
    while (n > 1)
    {
        n--;
        int i = random.Next(n + 1);
        int temp = array[i];
        array[i] = array[n];
        array[n] = temp;
    }
}

关于c# - n个连续整数的随机排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14535274/

相关文章:

c# - 无法将 lambda 表达式转换为 int 类型,因为它不是委托(delegate)类型

c# - 选择具有相同过滤器的多个子列

c# - 从另一个线程或技巧访问 HttpSessionState (HttpContext.Current.Session)?

python - python列表中最常见的子列表

java - 在 Java 中创建方程组方法

c# - 人类语言测试算法

c# - 分配给接口(interface)数组初始化程序编译但为什么呢?

C# : How to use Thread and know when exactly thread work is finished?

java - 如何将知识陈述/关系从文本文件映射到(有向)图

java - 天真的算法实现