我需要以最有效的方式随机地“排序”一个整数列表(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。
您提出的算法会发现的一个问题是,当您接近随机播放的末尾时,循环将花费大量时间来寻找尚未交换的随机选择的元素。一旦交换到最后一个元素,这可能需要不确定的时间。
同样,如果要排序的元素数量奇数,看起来您的算法将永远不会终止。