http://qs1969.pair.com?node_id=31469


in reply to Randomize an array

How random do you want it, and what do you mean by "randomize"? I assume you want a random permutation, all permutations equally likey.

The traditional solution is something like:

for $i ($#array..0) { my $j = rand($i); @array[$i,$j] = @array[$j,$i]; }
This does @array swaps, and can be shown (see Knuth) that all permutations are equally likely -- assuming I haven't made any coding mistakes

This is probably the fastest randomization algorithm, although various implementations might be faster than mine.