in reply to Re^3: sort behavior explanation required
in thread sort behavior explanation required
#!/usr/bin/perl use strict; use warnings; no warnings 'recursion'; use Benchmark qw(timethese); my @w; my $max = 5000; # $w[$_] = int rand(20000) foreach (1..$max); # @w = 1..$max; @w = reverse 1..$max; sub merge { my @v = merge_sort (@w); # print "@v \n"; } sub merge_sort { my @x = @_; return @x if @x < 2; my $m = int @x / 2; my @a = merge_sort(@x[0 .. $m - 1]); my @b = merge_sort(@x[$m .. $#x]); for (@x) { $_ = !@a ? shift @b : !@b ? shift @a : $a[0] <= $b[0] ? shift @a : shift @b; } @x; } sub quick { my @d = quick_sort (@w); #print "@d \n" } sub quick_sort { my @a = @_; return @a if @a < 2; my $p = pop @a; quick_sort(grep $_ < $p, @a), $p, quick_sort(grep $_ >= $p, @a); } timethese (80, { 'quick' => \&quick, 'merge' => \&merge, } );
|
|---|