マージソートを実装する前に
今年のPerlアドベントカレンダーあった!!1
Perl Advent Calendar 2013
参加するには、qiitaのアカウントが必要っぽい。。。
そういえば、今年はPerlのアドベントカレンダーないんですかね?
ちょっとやり尽くした感あるから、今更なに書くんだ?みたいのはあるけど。
という訳で、マージソートやってないなーって思って、
コードを漁ってたら何か出てきたので晒そうと思う。
これは、たぶんPerlのsortが安定であることを確認するために書いたんだと思う。
use strict;
use warnings;
use v5.10;
my @group_A = qw/1 2 3/;
my @group_B = qw/4 5 6/;
my @data = ();
foreach ( @group_B ) {
push @data, [ 'B', $_ ];
}
foreach ( @group_A ) {
push @data, [ 'A', $_ ];
}
say '--- before ---';
foreach ( @data ) {
say $_->[0], ' : ', $_->[1];
}
say "\n", '--- sorted ---';
@data = sort { $a->[0] cmp $b->[0] } @data;
foreach ( @data ) {
say $_->[0], ' : ', $_->[1];
}
実行すると、こんな感じ。
$ perl aaa.pl
--- before ---
B : 4
B : 5
B : 6
A : 1
A : 2
A : 3
--- sorted ---
A : 1
A : 2
A : 3
B : 4
B : 5
B : 6
見ての通り、文字列でソートしてるんだけど、
ソートの性質が安定の場合は、グループ単位における並び順は維持される。
ただ、これだけ出力されても、安定だの不安定だの分かんないですね。
安定だの不安定だのは、この辺で書きました。
おしまい。
Leave a Comment