如何在c++中混淆一个具有n个值的数组

How to jumble up an array with n values in c++

本文关键字:一个 数组 c++      更新时间:2023-10-16

我正在尝试制作一个函数,将给定有序数组的值混合在一起,比如从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)

我在这里可能错了,但我认为重要的是让index20..n-1以上的范围内,而不是例如index..n-1,这样每一块都有平等的机会在所有位置结束。评论中建议的替代方案是,这也可能产生均匀分布的洗牌:

for index in 0..n-2
    index2 = random (index..n-1)
    swap (ar, index, index2)
相关文章: