一尘不染

在C#中随机“排序”(随机播放)整数列表的最有效方法

c#

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

阅读 290

收藏
2020-05-19

共1个答案

一尘不染

很好的线性时间改组算法是Fisher-Yates改组。

您提出的算法会发现的一个问题是,在随机播放即将结束时,您的循环将花费大量时间查找尚未交换的随机选择的元素。一旦交换到最后一个元素,这可能会花费不确定的时间。

而且,如果要排序的元素数量奇数,看来您的算法将永远不会终止。

2020-05-19