千晓夜 发表于 2019-9-3 11:14:48

31 全局变量和局部变量动动手 ,没明白是怎么使随机数不重复的。

void shuffle(int array[], int length)
{
      int index, temp, i;

      srand(time(NULL));
      for (i = 0; i < length; i++)
      {
                index = rand() % (length - i) + i;    //从这句开始没看懂
                if (index != i)
                {
                        temp = array;
                        array = array;
                        array = temp;
                }
      }
}

superbe 发表于 2019-9-3 11:58:40

本帖最后由 superbe 于 2019-9-3 12:04 编辑

实测index是有可能重复的。length越小,重复可能性就越大。
rand()产生随机数的范围是0--32767,%是求除法余数,比如对100求余,当么余数范围当然是0--99。
所以上面for循环产生的index范围:(比如length=5)
i=0时,index=0--4
i=1时,index=1--4
i=2时,index=2--4
i=3时,index=3--4
i=4时,index=4--4
下面的if(index!=i)判断是为了避免自己和自己做交换。
页: [1]
查看完整版本: 31 全局变量和局部变量动动手 ,没明白是怎么使随机数不重复的。