随机排序一维数组

 

今天在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原帖链接

 

 




 

posted @ 2010-10-28 16:18  把爱延续  阅读(1581)  评论(0编辑  收藏  举报