Actually, a naïve merge sort is dead simple. Quite possibly the easiest to explain, too.
sub mergesort {
return $_[0] if @_ == 1;
my $i = int( @_ / 2 );
my @a = mergesort(@_[0..$i-1]);
my @b = mergesort(@_[$i..$#_]);
my @sorted;
while (@a && @b) {
if ($a[0] < $b[0]) { push @sorted, shift(@a); }
elsif ($b[0] < $a[0]) { push @sorted, shift(@b); }
else { push @sorted, shift(@a), shift(@b); }
}
return ( @sorted, @a, @b );
}
lol! I got two 5.8.8 question this week. It'll be a while before it's ok to be sick of 5.14.
|