生成不重復的隨機數的二種方法

作者: 周雪峰  來源: 博客園  發布時間: 2010-07-26 10:04  閱讀: 2643 次  推薦: 0   原文鏈接   [收藏]  

下面我以生成1-10之間的10個不重復的隨機數為例介紹生成不重復的隨機數的三種方法:
1. 通過while循環來實現
通過while循環不停的生成隨機數,直到生成一個不重復的為止,這種方法比較容易想到,但是效率也比較低下,實例代碼如下:

 
static void Main(string[] args)
{

int[] result = new int[10];
int tmp = -1;
Random random
= new Random();
bool repeat = false;
for (int i = 0; i < 10; i++)
{
repeat
= true;
while (repeat)
{
repeat
= false;

tmp
= random.Next(1, 11);
for (int j = 0; j < i; j++)
{

if (tmp == result[j])
{
repeat
= true;
break;
}
}
}
result[i]
= tmp;

}


for (int i = 0; i < 10; i++)
Console.WriteLine(result[i].ToString());
}

2. 通過for循環來實現
方法1使用了多處循環嵌套,效率十分低下,所以我應用一定的技巧來減少循環嵌套,來達到提高程序效率的目的。主要思路是如果檢測到重復,就把循環變量減1,這樣來重新進行一次循環,重新生成一個隨機數,直到生成一個不重復的隨機數為止,實例代碼如下:

 
static void Main(string[] args)
{

int[] result = new int[10];
int tmp = -1;
Random random
= new Random();
bool repeat = false;
for (int i = 0; i < 10; i++)
{
repeat
= false;

tmp
= random.Next(1, 11);
for (int j = 0; j < i; j++)
{

if (tmp == result[j])
{
repeat
= true;
break;
}
}

if (!repeat)
{
result[i]
= tmp;
}

else
{
i
= i - 1;//循環變量-1
}


}


for (int i = 0; i < 10; i++)
Console.WriteLine(result[i].ToString());
}

這個方法減少了一層循環嵌套,效率上有一定的改善!

總結:

 

方法1效率比較低下,一般不推薦使用!
方法2比較通用,效率高于方法1。
請大家多多指教啊!

0
0
 
標簽:隨機數
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()