C中的争夺阵列?

时间:2014-04-13 01:06:08

标签: c random random-sample

我有一个2d坐标数组,我想以随机顺序迭代它们。我正在使用srand因此坐标将始终使用相同的密码随机化。这是一种安全形式 如何使用rand()加扰2d数组?

1 个答案:

答案 0 :(得分:1)

一种简单/简单的方法是创建一个从0n - 1的整数数组,其中n是第一个数组的长度。

随机播放此数组,然后使用其中的值作为原始数组上的迭代索引。

C中没有标准的shuffle方法,所以请使用:

#include <stdlib.h>

/* Arrange the N elements of ARRAY in random order.
   Only effective if N is much smaller than RAND_MAX;
   if this may not be the case, use a better random
   number generator. */
void shuffle(int *array, size_t n)
{
    if (n > 1) 
    {
        size_t i;
        for (i = 0; i < n - 1; i++) 
        {
          size_t j = i + rand() / (RAND_MAX / (n - i) + 1);
          int t = array[j];
          array[j] = array[i];
          array[i] = t;
        }
    }
}

取自:http://benpfaff.org/writings/clc/shuffle.html