SHOW:
|
|
- or go back to the newest paste.
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 | say join ' ', @unsorted; | |
10 | ||
11 | sub mergesort { | |
12 | my @items = @_; | |
13 | if (@items <= 1) { @items } | |
14 | else { merge([mergesort(splice @items, 0, ($#items+1)/2)],[mergesort(@items)]) } | |
15 | } | |
16 | ||
17 | sub merge { | |
18 | my @l1 = @{shift @_}; | |
19 | my @l2 = @{shift @_}; | |
20 | if (!@l2) { @l1 } | |
21 | elsif (!@l1) { @l2 } | |
22 | else { | |
23 | my ($a,$b) = (shift @l1,shift @l2); | |
24 | $a < $b ? ($a,merge([@l1],[$b,@l2])) : ($b,merge([$a,@l1],[@l2])); | |
25 | } | |
26 | } | |
27 | ||
28 | my @sorted = mergesort(@unsorted); | |
29 | say join ' ', @sorted; |