题目:
假设有一个数组,里面有10个元素 int a[10]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9}。请写一个算法,得到a数组的一个随机排列。要求时间复杂度尽量小,可以使用random函数。例如输出的随机序列可以是:3 6 2 4 5 1 9 8 0
思路:
1.将最大值max设置为9,在0~max之间产生一个随机数;
2.将数组a的max下标的值和产生下标的值互换,同时max--;
3.重复步骤1,2直到max==0停止循环,最后a中的数为原来数的随机排列。
代码如下:
#include<iostream> #include<ctime> using namespace std; //定义交换数组元素函数 void ss(int a[],int x,int len) { if(x!=len) { int temp=a[x]; a[x]=a[len]; a[len]=temp; } } //数组随机排列的实现 int* Rfan(int a[],int length) { int len=length-1; while(len>0) { srand((int)time(NULL));//时间种子 int x=rand()%(len+1);//产生随机数 ss(a,x,len); len--; } return a; } int main() { int a[10]={0,1,2,3,4,5,6,7,8,9}; int *b=Rfan(a,10); for(int i=0;i<10;i++) { cout<<b[i]<<endl; } }
时间: 2024-10-18 19:12:12