c++ STL 随机打乱数组 random_shuffle()
使用方法:
头文件:algorithm
使用:
要打乱的数组(容器)的起始地址和结束地址:random_shuffle( begin , end)
复杂度:O(n)
将数组元素打乱,但每次都是同一种打乱顺序(伪打乱),若要每次都打乱的不同则需更改随机种子,看代码:
#include<algorithm>
#include<cstdio>
#include<ctime>
using namespace std;
int Rand(int i){return rand()%i;}
int main()
{
//srand( unsigned (time(0)) );
int a[10]={1,2,3,4,5,6,7,8,9,10};
int b[10]={1,2,3,4,5,6,7,8,9,10};
int c[10]={1,2,3,4,5,6,7,8,9,10};
random_shuffle(a,a+10);//将数组元素打乱,但每次都是同一种打乱顺序
printf("打乱后的a数组顺序(不加随机种子):");
for(int i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
/*更改随机种子*/srand ( unsigned ( time(0) ) );
printf("打乱后的b数组顺序(加随机种子)(三参数):");
random_shuffle(b,b+10,Rand);
//或者原先的写法均可 random_shuffle(b,b+10);
for(int i=0; i<10; i++)
printf("%d ",b[i]);
printf("\n");
random_shuffle(c,c+10);
printf("打乱后的c数组顺序(加随机种子)(两参数):");
for(int i=0; i<10; i++)
printf("%d ",c[i]);
return 0;
}
运行结果:
第一次:
第二次:
第三次: