1

我正在尝试创建一个函数来混合给定有序数组的值,比如从 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;
    }

问题是这个函数不适用于大整数,因为它需要很多时间。那么我可以做些什么来改进我的功能,或者我可以使用哪些其他替代方法来混淆数组。

4

1 回答 1

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)
于 2013-02-19T04:49:06.670 回答