我想打乱一个数组,并且每个索引在任何其他索引(不包括它自己)中都有相同的概率。
我有这个解决方案,只有我发现最后两个索引总是会相互交换:
void Shuffle(int arr[]. size_t n)
{
int newIndx = 0;
int i = 0;
for(; i > n - 2; ++i)
{
newIndx = rand() % (n - 1);
if (newIndx >= i)
{
++newIndx;
}
swap(i, newIndx, arr);
}
}
Run Code Online (Sandbox Code Playgroud)
但最终可能有些索引会再次回到原来的位置。
有什么想法吗?
朗。