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 | - | if (!@l2) { @l1; } |
21 | + | elsif (!@l1) { @l2 } |
22 | - | elsif (!@l1) { @l2; } |
22 | + | |
23 | my ($a,$b) = (shift @l1,shift @l2); | |
24 | - | my ($a,$b) = (shift @l1, shift @l2); |
24 | + | $a < $b ? ($a,merge([@l1],[$b,@l2])) : ($b,merge([$a,@l1],[@l2])); |
25 | - | $a < $b ? ($a, merge([@l1], [$b,@l2])) : ($b, merge([$a,@l1], [@l2])); |
25 | + | |
26 | } | |
27 | ||
28 | my @sorted = mergesort(@unsorted); | |
29 | say join ' ', @sorted; |