虽然不是很好,还是放上来
大家的思路都是for 循环,得到随机数,不重复添加,重复继续寻找随机数,知道满了为址

int[] reInt=new int[20] ...{-1,-1-,1-1.................};
for (int iCount=0;iCount<20;iCount++)

...{
bool isFind=false;
int rand=new Random().Next(1,20);
for(int yCount=0;yCount<20;yCount++)
...{
if(reInt[yCount]==rand)
...{
isFind=true;
break;
}
}
if(isFind)
iCount--;
else
reInt[iCount]=rand;
} 
大部分的书估计都是这样写,这样的缺点是单这个数字段如果是1000个的时候,很难判断这两个for循环什么时候会结束,不是简单的n*n哦。我的方法如下
private System.Random random = new Random();
private int iCount = 0;
private int[] retInt=new int [20]...{-1,-1.............};
public void GetRandom(int start ,int end)
...{
if (start == end)
...{
retInt[iCount++)=start;
return ;
}
int mid= random.Next(start, end);
retInt[iCount++)=mid;
//左边随机
if(mid!=start) GetRandom(start, mid - 1);
//右边随机
if (mid != end) GetRandom(mid + 1, end);
return ;
}
这样20个数,就是20次随机,10000个就是1w次随机

本文介绍了一种改进的随机数生成算法,通过递归的方式避免了传统双层for循环可能出现的性能问题,确保了生成的随机数集合中不会出现重复。
2078

被折叠的 条评论
为什么被折叠?



