zoukankan      html  css  js  c++  java
  • 生成不重复随机数

        有一次需要生成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;
                }
    
  • 相关阅读:
    第04组 Alpha冲刺 总结
    第04组 Alpha冲刺 (6/6)
    软工实践个人总结
    第09组 每周小结 (3/3)
    第09组 每周小结 (2/3)
    第09组 每周小结 (1/3)
    第09组 Beta冲刺 总结
    第09组 Beta冲刺 (5/5)
    第09组 Beta冲刺 (4/5)
    第09组 Beta冲刺 (3/5)
  • 原文地址:https://www.cnblogs.com/kulong995/p/1678673.html
Copyright © 2011-2022 走看看