スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

reverse sortの方が速かったのね

Perl Best Practicesを読んでいたら、配列を逆順にソートするなら sort {$b cmp $a} @data より reverse sort @data の方が速い、てな話が書いてあった。何と、オレはいままで前者の書き方をしてたぞ。という訳で早速実験。 こんなスクリプトを書いた。
use strict;
use Benchmark qw(:all);

my @data = map { int(rand(1000)) } 1..1000;
my @str_data = map { "$_" } @data;

my @out;

# 文字列としてソート
cmpthese(-10, {
    sort_compare_string => sub { @out = sort { $b cmp $a } @str_data },
    sort_reverse_string => sub { @out = reverse sort @str_data },
});

# 数値としてソート
cmpthese(-10, {
    sort_compare_numeric => sub { @out = sort { $b <=> $a } @data; },
    sort_reverse_numeric => sub { @out = reverse sort { $a <=> $b } @data; },
});
結果は... 確かにreverse sortの方が一割強速い。
                     Rate sort_compare_string sort_reverse_string
sort_compare_string 466/s                  --                -10%
sort_reverse_string 520/s                 12%                  --
                      Rate sort_compare_numeric sort_reverse_numeric
sort_compare_numeric 607/s                   --                 -12%
sort_reverse_numeric 690/s                  14%                   --
数値として比較しているときでもreverse sortの方が速いのには驚き。
スポンサーサイト

この記事のトラックバックURL

http://saltyduck.blog12.fc2.com/tb.php/9-1818fa18

コメント

コメントする

管理者にだけ表示を許可する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。