User:Ilmari Karonen/sandbox

A Fisher-Yates shuffle with zero-based arrays:

i ← length( a ) − 1 while i ≥ 1 j ← rand( 0, i ) ( ai, aj ) ← ( aj, ai ) i ← i − 1 repeat

Alternative notation:

for i := length( a ) − 1 down to 1 step -1 do j := rand( 0, i ); swap( ai, aj ) od;

Note: rand( a, b ) is assumed to return a uniformly distributed random integer from a to b inclusive.