首页 > 其他 > 详细

随机序列问题

时间:2015-04-29 23:00:21      阅读:248      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!