zoukankan      html  css  js  c++  java
  • 随机排序一维数组

    今天在CSDN上看到一个关于随机数问题的帖子,忽然间想起以前写过一个随机排序一维数组的方法、于是开始“翻箱倒柜”终于把它找出来了,呵呵 …

    LZ 原帖:
    比如我现在有1到50这个50个数,每次循环我都去随机这50个数,如果判断,在随机的时候产生的数不相等?也就是说我想把这个50个数的顺序打乱,分别显示出来??怎么做???


    我的跟帖:

       public void RandSort(int[] _num)
            {
                Random rd = new Random();
                int temp = 0;
                int tempNum = 0;
                for (int i = 0; i < _num.Length - 1; i++)
                {
                    int temp = rd.Next(i,_num.Length);
                    int tempNum = _num[i];  
                    _num[i] = _num[temp];
                    _num[temp] = tempNum;
                    Thread.Sleep(20);//注意:引入命名空间:System.Threading;
                }
            }

     我写的这个方法,为了避免相同的随机数出现,中间sleep了一下,效率确实降低了不少,不过去掉sleep也不大碍。

    另外在这个帖子上还看到两个不一样思路的方法、随便分享一下:
    方法一

    代码

    // 作者 CSDN 用户名: Baesky

    class Program
    {
    staticvoid Main(string[] args)
    {
    DateTime dt1
    = DateTime.Now;
    IEnumerable
    <int> squares = Enumerable.Range(1, 50);
    List
    <int> lst =new List<int>();
    foreach (int i in squares)
    {
    lst.Add(i);
    }
    int[] rslt =newint[50];
    Random rand
    =new Random();
    for (int i =49; i >=0; i--)
    {
    int r = rand.Next(0, i);
    rslt[i]
    = lst[r];
    lst.RemoveAt(r);
    }


    Console.WriteLine(
    "consume MilSec:"+ (DateTime.Now - dt1).TotalMilliseconds.ToString());
    int line =0;
    foreach (int t in rslt)
    {
    Console.WriteLine(line
    +++":"+ t.ToString());
    }
    }
    }

    当然、我感觉上面的方法开始部分还是有些累赘,不知大侠们是怎样认为的???
    他的大致思路是:随机从一个集合中取出一个数字,然后依次存入数组中,已达到随机排序的目的。

    方法二

    代码
    // 作者CSDN 用户名:phil999

    privatestaticvoid sort()
    {
    int[] arr =newint[] { 1 to 50 };
    int[] keys =newint[arr.Length];
    Random random
    =new Random();


    for (int i =0; i < keys.Length; i++)
    {
    keys[i]
    = random.Next();
    }

    Array.Sort(keys, arr);
    // arr 现在随机了

    }

    这个方法呢 是巧用了 Array的Sort方法。

    更多方法请参见CSDN原帖链接




     



    返回导读目录,阅读更多随笔



    分割线,以下为博客签名:

    软件臭虫情未了
    • 编码一分钟
    • 测试十年功


    随笔如有错误或不恰当之处、为希望不误导他人,望大侠们给予批评指正。

  • 相关阅读:
    C#代码中函数调用相关问题
    C#语言编写代码时常用的三大循环
    c#语言中的类型转换
    tesseract_vs2015工具包使用
    Halcon除法
    halcon批量读取图片
    halcon分离路径名称
    Halcon旋转图片的研究
    关于Haclon使用GPU加速的代码实例
    OpenCV代码:画出轮廓的外接矩形,和中心点
  • 原文地址:https://www.cnblogs.com/08shiyan/p/1863645.html
Copyright © 2011-2022 走看看