我正在尝试在Perl中找到最快的排序算法。搜索cpan我找到了Algorithm::Sorting 模块。我在下面尝试了一个简单的代码,找出哪种是最好的排序算法,但每次更改数据列表时结果都会有所不同。此模块也不支持Merge,Heap和Quick3排序,这些也很重要。
#!/usr/bin/perl
use Algorithm::Sorting;
use Benchmark qw(:all);
my @list = (int rand(1000_000)) x 10000;
my @sorts = qw(BubbleSort ShakerSort SelectionSort InsertionSort ShellSort QuickSort);
#Algorithm: Bubble Heap Insertion Merge Quick Quick3 Selection Shell
#my @test = @list;
#BubbleSort(@test);
#print "@test\n";
cmpthese (10, {
BubbleSort => sub { BubbleSort([@list]) },
ShakerSort => sub { ShakerSort([@list]) },
SelectionSort => sub { SelectionSort([@list]) },
InsertionSort => sub { InsertionSort([@list]) },
ShellSort => sub { ShellSort([@list]) },
QuickSort => sub { QuickSort([@list]) },
});
以下是基准测试结果:
Rate BubbleSort SelectionSort QuickSort ShellSort InsertionSort ShakerSort
BubbleSort 7.09e-002/s -- -30% -99% -100% -100% -100%
SelectionSort 0.102/s 43% -- -99% -100% -100% -100%
QuickSort 10.5/s 14707% 10247% -- -54% -79% -80%
ShellSort 22.9/s 32157% 22440% 118% -- -54% -57%
InsertionSort 49.3/s 69339% 48422% 369% 115% -- -8%
ShakerSort 53.5/s 75281% 52573% 409% 134% 9% --
Output completed (4 min 1 sec consumed)