我想知道你们中的一些人是否了解 Fisher-Yates shuffle 的工作原理并可以向我解释。所以我在网上找到了这个 Fisher-Yates Shuffle 代码:
public function Main() {
var tempArray:Array = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
ShuffleArray(tempArray);
trace(tempArray);
}
public function ShuffleArray(input:Array)
{
for (var i:int = input.length-1; i >=0; i--)
{
var randomIndex:int = Math.floor(Math.random()*(i+1));
var itemAtIndex:Object = input[randomIndex];
input[randomIndex] = input[i];
input[i] = itemAtIndex;
}
}
该代码完美运行,但我仍然感到困惑
- 我将循环更改为“input.length”,但效果不佳,有时我仍然得到“0”值。我不知道为什么要使用“input.length-1”而不是“input.length”
- 在 randomize 部分,为什么我要将索引从 0 随机化到值 (i+1),我们为什么不直接将它从 0 随机化到 (i) 呢?
如果你们中的一些人理解它,你能解释一下吗?太感谢了