随机排序一维数组

 

今天在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
{
static void 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 = new int [ 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

private static void sort()
{
int [] arr = new int [] { 1 to 50 };
int [] keys = new int [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原帖链接

 

 




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值