目的:以随机顺序存储1-1000之间的数字。
我的代码:
#include<time.h>
int main(){
int arr[1000]={0}, store[1000];
for(int i=0;i<1000;i++){
int no;
while(1){
srand(time(0));
no=rand();
no%=1001;
if(no==0)
continue;
//This ensures Loop will continue till the time a unique random number is generated
if(arr[no-1]!=no){
arr[no-1]=no;
break;
}
}
store[i]=no;
}
对我来说,代码可以正常工作,但是我花了58分钟执行时间。有办法加快程序速度吗?
实用目的:我有大约4000名员工,并且我想给他们每个人一个唯一的随机数,用于即将进行的项目。
我尝试使用1000执行代码以检查效率。
答案 0 :(得分:0)
创建一个包含1到n的数组。遍历列表并将该条目与随机选择的条目交换。然后,您将获得一个包含1到n的随机列表。
答案 1 :(得分:0)
从第一句话开始,数字不必是随机的,而只需按随机顺序即可。
因此,您可以尝试一种简单的方法:
使用此算法,您无需担心随机数的冲突。 您交换数字,然后减少候选人的范围。 一次选择的号码无法在以后的步骤中选择。
此解决方案与William的答案类似。我真的不知道结果是否具有更好的“随机性”。
答案 2 :(得分:0)
尽量避免在随机数上分支。而且很可能会在现代处理器上运行得更快。
这是因为处理器无法预测随机数的选择方式。
例如
while(1){
srand(time(0));
no=rand();
no%=1001;
if(no==0)
continue;
// ...
}
可以更改为
srand(time(0)); // better outside the loop
while(1) {
no = rand() % 1000 + 1;
// ...
}