以下代码是什么意思?什么是RAND_MAX?由于某种原因,我发现这段代码很难理解。我不明白的部分是int j = i + rand()/(RAND_MAX /(curr_pos-i) + 1);
。
if (curr_pos > 1) {
for (int i = 0; i < curr_pos-1; i++) {
int j = i + rand()/(RAND_MAX /(curr_pos-i) + 1);
swap(&array[j], &array[i]);
}
}
RAND_MAX
是一个宏,在中定义stdlib.h
:
兰特返回的最大值
我们把rand()
通过RAND_MAX
以得到整数除法。
因此,这里有:
int j = i + rand()/(RAND_MAX /(curr_pos-i) + 1);
也就是说,将j
的值赋给i
,再加上:
rand()/(RAND_MAX /(curr_pos-i) + 1)
这意味着:除以rand()
:
RAND_MAX /(curr_pos-i) + 1
在这里,curr_pos-i
将首先进行评估,然后我们将RAND_MAX
其除以相减的结果。然后,我们将添加1
到除法结果中。
PS:这段代码看起来像是试图实现Fisher-Yates shuffle,尽管@ user3386109指出了if语句是不必要的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句