原代码的意思是,pos2 从 [0, pos1) ∪ (pos1, length) 中随机。因为区间不连续了,所以先从 [0, length-1) 中随机,再把 [pos1, length-1) 映射到 (pos1, length)。效果跟文章作者删掉 pos1 再随机的做法一样,但是时间复杂度显然是不一样的,也不需要额外空间。 另一种常见的做法是用最后一个元素填充 pos1 的空缺,只需要改成 if (pos2 == pos1) pos2 = length - 1;