随机排序一维数组
今天在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 用户名: 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 现在随机了
}
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原帖链接