sub Merge(@) { my @array = @_; MergeSort (\@array, 0, $#array); return @array; } sub MergeSort($$$) { my $arrref = shift; my $first = shift; my $last = shift; if ($last>$first) { my $mid = int(($last+$first)/2); MergeSort($arrref, $first, $mid); MergeSort($arrref, $mid+1, $last); my @b; @b = ( @{$arrref}[$first..$mid], @{$arrref}[reverse($mid+1..$last)] ); my ($i, $j, $k) = (0, $last-$first, $first); for (; $k<=$last; $k++) { $arrref->[$k] = ($b[$i]<$b[$j]) ? $b[$i++] : $b[$j--]; } } }