码迷,mamicode.com
首页 > 其他好文 > 详细

随机序列问题

时间:2015-04-29 23:03:28      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

题目:

假设有一个数组,里面有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;
    }
}

 

随机序列问题

标签:

原文地址:http://www.cnblogs.com/runninglzw/p/4467520.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!