随机序列问题

题目:

假设有一个数组,里面有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;
    }
}
原文地址:https://www.cnblogs.com/runninglzw/p/4467520.html