百度百科:
srand函数是随机数发生器的初始化函数。原型:void srand(unsigned int seed);
srand和rand()配合使用产生伪随机数序列。rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,rand根据这个种子的值产生一系列随机数。如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的。srand(unsigned seed)通过参数seed改变系统提供的种子值,从而可以使得每次调用rand函数生成的伪随机数序列不同,从而实现真正意义上的“随机”。通常可以利用系统时间来改变系统的种子值,即srand(time(NULL)),可以为rand函数提供不同的种子值,进而产生不同的随机数序列。
void shuffle(int a[], size_t n, unsigned int seed)//数组打乱
{
srand(seed);
for (; n > 1; n--)
{
unsigned int r = rand() % n;
int tmp = a[n - 1];
a[n - 1] = a[r];
a[r] = tmp;
}
}
void restore(int a[], size_t n, unsigned int seed)//数组恢复
{
int i=1,x=n;
for (; n > 1; n--)
{
int y = x;
srand(seed);
unsigned int r ;
int j = n ;
while(j>1){
r = rand() % y;
y--;
j--;
}
int tmp = a[i];
a[i] = a[r];
i++;
a[r] = tmp;
}
}