数组的随机打乱
数组的随机打乱
本篇随笔介绍一下一个小技巧:数组的随机打乱。
有两种方式,第一种是用STL里的random_shuffle函数,第二种是手写。
第一种:STL
就是介绍一下random_shuffle函数的用法。
传两个参数,表示数组的首尾元素即可。
random_shuffle(a+1,a+n+1);//打乱a数组(1-n)。
第二种:手写
手写函数比较简单,但是思想挺巧妙的,是一种随机化算法。
直接放代码,大家应该看就能看明白。
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
swap(a[i],a[(rand()%i)+1]);
}
差不多就这些。别怪我水博。