#!perl
use strict;
my ($list_size, $max_num, @numbers, $start_time);
#Generate a large number of random integers
$list_size = 10000;
$max_num = 1000;
@numbers = ();
for(1..$list_size) {
push(@numbers, int(rand($max_num)));
}
#Print out the number array, then sort it, then print it out again in sorted order
#print "\n\n@numbers";
$start_time = time;
@numbers = @{insertionsort(\@numbers)};
#print "\n\n@numbers";
print "INSERTIONSORT sorted $list_size integers between 1 and $max_num in " . (time - $start_time) . " seconds\n";
#Insertion sort is how humans often sort a deck of cards
#Start with a stack of unsorted numbers, pop each number in turn
#And insert it into a second sorted stack at the proper place
sub insertionsort {
my ($numbers, @sorted, $found);
($numbers) = @_;
my @sorted = ();
for(my $i = 0; $i <= $#{$numbers}; $i++) {
$found = 0;
for(my $j = 0; $j <= $#sorted; $j++) {
if( $numbers->[$i] < $sorted[$j] ) {
splice @sorted, $j, 0, $numbers->[$i];
$found = 1;
last;
}
}
unless ($found) { push @sorted, $numbers->[$i]; }
}
return \@sorted;
}
I don't have a lot to say, but this is my little bit.
Saturday, September 12, 2009
Insertionsort in perl
Insertion sort is significantly slower than the other sorts, but I think I could improve this by doing an O(log n) insert, whereas here I have a linear insert.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment