有比rand()更好的功能吗?

AYR*_*AYR 1 c random srand

我有一个程序,在C中,它使用0-999的随机数创建一个1000个整数的数组,然后在该数组上执行某种算法.为了测试算法的运行时间,我尝试运行程序10000次,但每次运行它时,数组对于一些数组是相同的,然后它会改变.我已经使用该srand()函数以当前时间提供种子,但它仍然无济于事.

是否有替代解决方案rand()或解决方法?我的功能是:

void getarray(int *ptr1, int size, int option){
    int n;
    srand(time(NULL));
    for(n=0; n<size; n++)
        *(ptr1+n) = *(ptr2+n)= rand()%1000; 
}
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Pub*_*bby 10

你应该只调用一次srand:在程序启动时.

现在,如果您在time更改之前多次调用您的函数,则序列将是相同的.


Ale*_*eys 5

lrand48() 调用在内部往往有更多的状态和更好的伪随机数分布。

但是,请注意,您仅以 1 秒的粒度重新播种,因此同一秒内的调用将生成相同的序列。把你的srand()电话放在main()或某处,一次,而不是在getarray.