Advertisement
robn

mergesort

Mar 12th, 2012
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 0.59 KB | None | 0 0
  1. #!/usr/bin/env perl
  2.  
  3. use 5.014;
  4. use warnings;
  5. use strict;
  6. use autodie;
  7.  
  8. my @unsorted = map { int(rand(100)) } 1..20;
  9.  
  10. say join ' ', @unsorted;
  11.  
  12. sub mergesort {
  13.     my @items = @_;
  14.     if (@items <= 1) { @items }
  15.     else { merge([mergesort(splice @items, 0, ($#items+1)/2)],[mergesort(@items)]) }
  16. }
  17.  
  18. sub merge {
  19.     my @l1 = @{shift @_};
  20.     my @l2 = @{shift @_};
  21.     if (!@l2) { @l1; }
  22.     elsif (!@l1) { @l2; }
  23.     else {
  24.         my ($a,$b) = (shift @l1, shift @l2);
  25.         $a < $b ? ($a, merge([@l1], [$b,@l2])) : ($b, merge([$a,@l1], [@l2]));
  26.     }
  27. }
  28.  
  29. my @sorted = mergesort(@unsorted);
  30. say join ' ', @sorted;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement