我需要以最有效的方式对整数列表 (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/