我正在尝试创建一个函数来混合给定有序数组的值,比如从0到n。所以这是我的尝试:
void JumbleUp(int *sorted,int n){
int jumble[n];
bool mark[n];
for(int i=0;i<n;i++)
mark[i]=false;
int aux=0;
srand(time(NULL));
for(int i=0;i<n;i++){
do {
aux=(rand()%n);
}while (mark[aux]);
jumble[i]=sorted[aux];
mark[aux]=true;
}
问题是这个函数对大整数不起作用,因为它需要花费很多时间。那么我该怎么做才能改进我的功能,或者我可以使用其他替代品来混淆阵列。
答案 0 :(得分:3)
你正在思考它。首先在程序启动时只调用srand
一次。然后是算法,像伪代码
for index in 0..n-1
index2 = random (0..n-1)
swap (ar, index, index2)
我可能在这里错了,但我认为将index2
置于上述范围0..n-1
而不是例如index..n-1
非常重要,因此每件作品都有相同的机会结束位置。备注中建议的替代方案是这样,它也可以产生均匀分布的随机数:
for index in 0..n-2
index2 = random (index..n-1)
swap (ar, index, index2)