生成不重复随机数
有一次需要生成N序列的不重复数字,最直观的理解就是不断生成一个小于N的随机数S,然后放入一个int[N]中:
1.当S不存在于int[N]中时,将S添加到int[N]中。
2.否则,重新生成S。
Random random = new Random();
int[] mat = new int[num];
mat[0] = random.Next(0, num);
int index = 2;
while (index < num)
{
bool find = false;
int tmp = random.Next(0, num);
for (int i = 0; i < index; i++)
{
if (tmp == mat[i])
{
break;
}
if (i == index - 1)
{
find = true;
}
}
if (find)
{
mat[index] = tmp;
index++;
}
}
这样的效率是极其低下的,当时怎么也不知道怎么想的就这么写了。后来觉得还是上网查找一下,得到一个更好的方法。
生成一个N序列的数组int[N],生成一个随机位置P,将int[p]与int[i]对调。不断缩小i的范围直至0。这个数组内的值就被“打乱”了。
Random random = new Random();
int[] mat = new int[num];
int i, p=0, tmp=0;
for(i=0;i<num;i++)
mat[i] = i;
for (i = num-1; i >= 0;i-- )
{
p = random.Next(0, i);
tmp = mat[p];
mat[p] = mat[i];
mat[i] = tmp;
}
作 者:doku
出 处:http://www.cnblogs.com/kulong995/
关于作者:喜欢编程,喜欢美食,专注于.NET项目开发。
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!


浙公网安备 33010602011771号