我需要以最有效的方式随机地“排序”一个整数列表(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

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

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

10-08 07:14