#!/usr/bin/perl use strict; use warnings; $| = 1; use Benchmark qw(cmpthese); use Sort::Key::Radix; use Sort::Key; my @data = map { int(500000 * rand) } 0..20_000; my @ss = Sort::Key::Radix::usort @data; for (0..int(0.1 * @data)) { my $i = int(@data * rand); my $j = int(@data * rand); next unless $j > $i; my $w = int (3*rand); if ($w == 0) { @ss[$i..$j] = @ss[$j, $i..($j-1)]; } elsif ($w == 1) { @ss[$i..$j] = @ss[($i+1)..$j, $i]; } else { @ss[$j, $i] = @ss[$i, $j]; } } print "semi sorted data created\n"; cmpthese -1, { builtin => sub { my @s = sort { $a <=> $b } @ss }, sk => sub { my @s = Sort::Key::usort @ss }, radix => sub { my @s = Sort::Key::Radix::usort @ss } };