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.

Replies are listed 'Best First'.
RE: Re: Randomize an array
by merlyn (Sage) on Sep 08, 2000 at 04:58 UTC
      That's what I get for reading too much of the Perl6 RFCs... I could have sworn that ($high..$low) would count down, not up...