c#随机数

  计算机不可能产生完全随机的数字,所谓的随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算,用产生的结果来近似的模拟完全随机数,这种随机数被称 作伪随机数。伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性,但是从实用的角度而言,其随机程度已足够了。伪随机数的选 择是从随机种子开始的,所以为了保证每次得到的伪随机数都足够地“随机”,随机种子的选择就显得非常重要。如果随机种子一样,那么同一个随机数发生器产生 的随机数也会一样。一般地,我们使用同系统时间有关的参数作为随机种子,这也是.net Framework中的随机数发生器默认采用的方法。

我们可以使用两种方式初始化一个随机数发生器:

  第一种方法不指定随机种子,系统自动选取当前时间作为随机种子:

1 Random ran = new Random();

第二种方法可以指定一个int型参数作为随机种子:

 1  private int numElements;
 2                  public void Insert(int item) 
 3                 {
 4                      arr[numElements] = item;
 5                      numElements++;
 6                  }
 7                 Random ran = new Random(100);// 使用指定的种子值初始化 System.Random 类的新实例。
 8                 for (int i = 0; i < 1000; i++)
 9                 {
10                     nums.Insert(ran.Next(0, 100));//ran.Next(0,100)产生的随机数传递给了inter,
11 //返回的随机数的下界(随机数可取该下界值)。
12 //maxValue:
13 //返回的随机数的上界(随机数不能取该上界值)。 maxValue 必须大于或等于 minValue。
14 //返回结果:
15 //一个大于等于 minValue 且小于 maxValue 的 32 位带符号整数,即:返回的值范围包括 minValue 但不包括 maxValue。
16 //如果 minValue 等于 maxValue,则返回 minValue。

默认情况下,C#中的伪随机数生成器Random是根据系统时间来设置其种子的。若我们采用默认的方式,对Random进行初始化的时候不赋予任何参数,其随机种子便采用系统时间。如果我们用循环一次生成多个随机数,由于CPU运算速度太快了,所以每次取到的都是同一个时间,即生成的随机数都会一样,测试各种算法排序的时间长短,需要不同的数组元素,因此每次生成随机数之前需要更换随机数种子。