This program will generate a random permutation of the integers {1, ..., n}.
Feel free to save this source code into a file of your own to try out
and/or experiment with.
#!/usr/local/bin/perl -w
#
# This program will generate a random permutation of the integers
# { 1, ..., n } for a user specified integer n. We assume that
# user inputs a positive integer (if it's negative then we'll get
# an error as the program executes).
#
# We use the Markov chain Monte Carlo method for generating the
# random permuation.
#
use strict;
my ($n, @nums, $iters, $i, $k, );
# seed the random number generator
srand;
# get input from the user
print "\nEnter the length of the permutation: ";
$n = <STDIN>;
# initialize with the identity permutation
@nums = 1 .. $n;
# create the permutation
$iters = 12 * $n**3 * log($n) + 1;
for ( $i = 1; $i <= $iters; $i++)
{
if (rand(1) <= .5) # Flip a coin, and if heads swap
# a random adjacent pair of elements.
{
$k = int( rand($n-1) );
( $nums [$k], $nums [$k + 1] ) = ( $nums [$k + 1], $nums [$k] );
}
}
print "\n@nums \n\n";