实际上打乱数组的过程就是交换其值
只要随机获取两个数组下标使其值交换便即可
生成随机数函数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;
}
}
}