1. 产生n个不重复的随机数字,范围是[0, n)。基本思想:有序数据的随机交换。
static int randint(int l, int u)
{ return l + rand() % (u-l+1);
}
/* generate n distinct random integer in range [0, n)
* the implementation depends on a global varible
* int gRawDataSet[DATA_SET_SIZE];
*
* generate random index then replace the current element
* with that one.
*/
static void gen_distinct_random(int n)
{
//printf("%d\n", n);
int i;
for (i = 0; i < n; i++)
{
gRawDataSet[i] = i;
}
for (i = 0; i < n; i++)
{
int idx = randint(i, n - 1); //printf("idx = %d \n", idx);
int t = gRawDataSet[idx];
gRawDataSet[idx] = gRawDataSet[i];
gRawDataSet[i] = t;
printf("%d ", gRawDataSet[i]);
}
printf("\n");
}
2.检验产生的随机数字序列是否有序? 是否存在重复元素?序列是否有序的判断是一个十分直观的问题,是否存在重复元素的判断就要复杂一些了。可以采用的方法有两类。第一类是采用先排序将重复元素集中再进行检测的方式。第二类