|
20鱼币
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[i];
array[i] = array[index];
array[index] = temp;
}
}
}
大佬们好,
这是个c语言洗牌的函数,我想问下就是 index = rand() % (length - i) + i;这句话讲index的范围限制在i到length-i-
1之间,这样的设定是为什么呀?
最开始是0-54,然后1-53,然后是2-52,不断缩小这是为什么呀?
本帖最后由 jhq999 于 2021-9-7 12:11 编辑
这是个c语言洗牌的函数,我想问下就是 index = rand() % (length - i) + i;这句话讲index的范围限制在i到length-i-
1之间,这样的设定是为什么呀?
位置i和i到length-1之间的随机取的的值交换,
length=54;
length - i是54-》53-》52,别忘了后面还有加i。 index的取值范围一直是i到length-1之间。直到i=53,取余为0,所以index=53,不交换
至于i前面都是随机完了的,大多数都已经随机交换了,就相当于已经洗完牌了
|
最佳答案
查看完整内容
这是个c语言洗牌的函数,我想问下就是 index = rand() % (length - i) + i;这句话讲index的范围限制在i到length-i-
1之间,这样的设定是为什么呀?
位置i和i到length-1之间的随机取的的值交换,
length=54;
length - i是54-》53-》52,别忘了后面还有加i。 index的取值范围一直是i到length-1之间。直到i=53,取余为0,所以index=53,不交换
至于i前面都是随机完了的,大多数都已经随机交换了,就相当于已经洗完牌了
|