如何在c ++中混合使用n个值的数组

时间:2013-02-19 03:52:48

标签: 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;
    }

问题是这个函数对大整数不起作用,因为它需要花费很多时间。那么我该怎么做才能改进我的功能,或者我可以使用其他替代品来混淆阵列。

1 个答案:

答案 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)