zoukankan      html  css  js  c++  java
  • 随机序列问题

    题目:

    假设有一个数组,里面有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;
        }
    }
  • 相关阅读:
    Mysql-窗口函数
    aplly-lambda-map用法
    python-pymysql 操作数据库-创建-写入-多线程写入-读取-清空表
    graphviz安装
    sklearn-决策树
    pandas-烹饪指南
    Tomcat配置https
    azkaban 编译部署
    sqoop部署及使用
    spark面试题-1
  • 原文地址:https://www.cnblogs.com/runninglzw/p/4467520.html
Copyright © 2011-2022 走看看