小编Eya*_*per的帖子

混洗数组,同时使每个索引在任何索引中的概率相同

我想打乱一个数组,并且每个索引在任何其他索引(不包括它自己)中都有相同的概率。

我有这个解决方案,只有我发现最后两个索引总是会相互交换:

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)

但最终可能有些索引会再次回到原来的位置。

有什么想法吗?

朗。

c random algorithm shuffle

2
推荐指数
1
解决办法
170
查看次数

标签 统计

algorithm ×1

c ×1

random ×1

shuffle ×1