c# - 在 C# 中随机 "sort"(Shuffle) 整数列表的最有效方法

标签 c# random shuffle

我需要以最有效的方式对整数列表 (0-1999) 进行随机“排序”。有什么想法吗?

目前,我正在做这样的事情:

bool[] bIndexSet = new bool[iItemCount];

for (int iCurIndex = 0; iCurIndex < iItemCount; iCurIndex++)
{
    int iSwapIndex = random.Next(iItemCount);
    if (!bIndexSet[iSwapIndex] && iSwapIndex != iCurIndex)
    {
        int iTemp = values[iSwapIndex];
        values[iSwapIndex] = values[iCurIndex];
        values[iCurIndex] = values[iSwapIndex];
        bIndexSet[iCurIndex] = true;
        bIndexSet[iSwapIndex] = true;
    }
}

最佳答案

一个好的线性时间混洗算法是 Fisher-Yates shuffle .

您会发现您提出的算法存在的一个问题是,当您接近洗牌结束时,您的循环将花费大量时间来寻找尚未交换的随机选择的元素。一旦到达要交换的最后一个元素,这可能需要一段不确定的时间。

此外,如果要排序的元素数量为奇数,您的算法似乎永远不会终止。

关于c# - 在 C# 中随机 "sort"(Shuffle) 整数列表的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/375351/

相关文章:

c# - WPF 加载微调器

c# - .NET 环境变量是否被删除

javascript - 随机数生成器在 var 元素内部每次调用时都会给出相同的输出

java - 如何随机分配数组的所有元素?

java - 如何在 Java 中返回 5 个随机的 "Powerball"数字

php 洗牌

c++ - 打乱矩阵

c# - 在不锁定 GUI 的情况下暂停方法的执行。 C#

C# - 检查从 XML 文件创建的列表中是否存在值

python - 如何在 Python 中随机播放磁盘上的文本文件