"血をもって書け。そうすればあなたは、血が精神だということを経験するだろう。"

選択ソート

Wikipediaのほぼ直訳。そろそろ飽きてきたな。っていうかアルゴリズムのシビアな話をPerlでやるなって感じですね。Haskellでやろうかな。

use strict;
use warnings;
my $trials = 20;
my %h = map { int rand $trials => 1 } 1..$trials;
my @target = keys %h;

print join("  ", @target);
print "\n";

@target = sel_sort(@target);

sub sel_sort {
  my @ary = @_;
  for my $i (0..$#ary-1) {
    my $min = $i;
    for my $j ($i+1..$#ary) {
      $min = $j if $ary[$min] > $ary[$j];
    }
    ($ary[$i], $ary[$min]) = ($ary[$min], $ary[$i]);
    print join("  ", @ary);
    print "\n";
  }
  @ary;
}
6  11  3  2  12  17  15  14  8  18  19  13  10
2  11  3  6  12  17  15  14  8  18  19  13  10
2  3  11  6  12  17  15  14  8  18  19  13  10
2  3  6  11  12  17  15  14  8  18  19  13  10
2  3  6  8  12  17  15  14  11  18  19  13  10
2  3  6  8  10  17  15  14  11  18  19  13  12
2  3  6  8  10  11  15  14  17  18  19  13  12
2  3  6  8  10  11  12  14  17  18  19  13  15
2  3  6  8  10  11  12  13  17  18  19  14  15
2  3  6  8  10  11  12  13  14  18  19  17  15
2  3  6  8  10  11  12  13  14  15  19  17  18
2  3  6  8  10  11  12  13  14  15  17  19  18
2  3  6  8  10  11  12  13  14  15  17  18  19