|
|
| We don't bite newbies here... much | |
| PerlMonks |
How do I shuffle an array randomly?by faq_monk (Initiate) |
| on Oct 08, 1999 at 00:20 UTC ( #615=perlfaq nodetype: print w/ replies, xml ) | Need Help?? |
|
Current Perl documentation can be found at perldoc.perl.org. Here is our local, out-dated (pre-5.6) version: Use this:
# fisher_yates_shuffle( \@array ) :
# generate a random permutation of @array in place
sub fisher_yates_shuffle {
my $array = shift;
my $i;
for ($i = @$array; --$i; ) {
my $j = int rand ($i+1);
next if $i == $j;
@$array[$i,$j] = @$array[$j,$i];
}
}
fisher_yates_shuffle( \@array ); # permutes @array in place You've probably seen shuffling algorithms that works using splice, randomly picking another element to swap the current element with:
srand;
@new = ();
@old = 1 .. 10; # just a demo
while (@old) {
push(@new, splice(@old, rand @old, 1));
}
This is bad because splice is already
|
|