fork download
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. sub merge {
  6. my($s, @b) = @_;
  7. my(@a) = splice(@b, $s);
  8.  
  9. if (@a * @b == 0) { return @a, @b; }
  10. my($head) = $a[0] < $b[0] ? shift(@a) : shift(@b);
  11. return $head, merge(int(@a), @a, @b);
  12. }
  13.  
  14. sub mergesort {
  15. my($half) = int(@_ / 2);
  16. if ($half == 0) { return @_; }
  17.  
  18. return merge($half, mergesort(splice(@_, $half)), mergesort(@_));
  19. }
  20.  
  21. my(@sorted) = mergesort(10, 9, 8, 4, 5, 6, 7, 3, 2, 1);
  22. print(join(" ", @sorted) . "\n");
Success #stdin #stdout 0s 3740KB
stdin
Standard input is empty
stdout
1 2 3 4 5 6 7 8 9 10