マージソートを実装する前に

今年の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