我需要以最有效的方式随机地对整数列表(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改组。
您提出的算法会发现的一个问题是,在随机播放即将结束时,您的循环将花费大量时间查找尚未交换的随机选择的元素。一旦交换到最后一个元素,这可能会花费不确定的时间。
而且,如果要排序的元素数量奇数,看来您的算法将永远不会终止。