随机排序一维数组
?
今天在CSDN上看到一個關于隨機數問題的帖子,忽然間想起以前寫過一個隨機排序一維數組的方法、于是開始“翻箱倒柜”終于把它找出來了,呵呵 …
?
LZ 原帖:
比如我現在有1到50這個50個數,每次循環我都去隨機這50個數,如果判斷,在隨機的時候產生的數不相等?也就是說我想把這個50個數的順序打亂,分別顯示出來??怎么做???
?
我的跟帖:
?
?我寫的這個方法,為了避免相同的隨機數出現,中間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 用戶名:phil999privatestaticvoid 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原帖鏈接
?
?
?
總結
- 上一篇: 按值传递按引用传递按地址传递
- 下一篇: 20101029总结