如何在c++中混淆一个具有n个值的数组
How to jumble up an array with n values in c++
我正在尝试制作一个函数,将给定有序数组的值混合在一起,比如从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;
}
问题是这个函数不适用于大整数,因为它需要很多时间。那么,我可以做些什么来改进我的函数,或者我可以使用其他什么替代方案来混淆数组。
您想得太多了。首先,程序启动时只调用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)