数组随机打乱

实际上打乱数组的过程就是交换其值
只要随机获取两个数组下标使其值交换便即可

生成随机数函数rand()
使用时间戳作为种子
将范围限制在0-(n-1)即可
n为数组的长度
可以手动设置,也可以使用Sizeof()获取总字节/数据类型字节得到
限定范围的公式为:rand()%(Max+1-Min)+Min

代码为下:

srand(time(NULL));//设置时间戳作为种子
rand()%((n-1)+1-0)+0;//限制范围0-(n-1)

声明两个变量以获取两个下标进行交换
当A=B即两个下标相同时,我们认为此次交换无意义 不执行交换

为了基本确保数组被打乱,我们规定对长度为n的数组进行n或(n-1)次非无意义的交换

代码为下:

A=rand()%L;
B=rand()%L;
c++;
if(A==B)
{
    i--;
    continue;
}
else
{
    Temp=Arr[A];
    Arr[A]=Arr[B];
    Arr[B]=Temp;
}

完整函数代码为下:

void RandomArray(int *Arr,int L)
{
    srand(time(NULL));
    int A,B,Temp,c=0;
    for(int i=0;i<L;i++)
    {
        A=rand()%L;
        B=rand()%L;
        c++;
        if(A==B)
        {
            i--;
            continue;
        }
        else
        {
            Temp=Arr[A];
            Arr[A]=Arr[B];
            Arr[B]=Temp;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Budops

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值