note: rng.next(min, max) can return a -ve value.
shuffle(a):
return shuffle(a.copy(), new rng())
// ok to modify buffer array
shuffle(buffer, rng):
for i = buffer.length -1, i >= 0, i--:
// rng.next(i) returns 0 to i-1, rng.next(0) is invalid
swapindex = rng.next(i +1)
yield return buffer[swapindex]
// no need to swap fully as buffer[i] is not used after this iteration
buffer[swapindex] = buffer[i]
No comments:
Post a Comment