比較しないソートの作成
Posted feedbacks - Perl
perlが無かったので。 アルゴリズムはバケツソートです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | use strict;
sub bucket_sort
{
my ($min, $max, $num, @data) = @_;
my @bucket;
eval {
for ( map { [$_ - $min,$_] } @data) {
$bucket[$_->[0]] = [] if !$bucket[$_->[0]];
push @{$bucket[$_->[0]]}, $_->[1];
}
};
if ( $@ ) {
bucket_sort($min-1,$max,$num,@data);
}
else {
map { @$_ } grep { $_ } @bucket;
}
}
$,=', '; $\="\n";
print bucket_sort(qw/-1 10 10 -1 9 4 8 9 6 3 9 5 2/);
print bucket_sort(qw/1 10 10 -1 9 4 8 9 6 3 9 5 2/);
|
バケットソートです。ワンライナーで書いてみました。 最大値と個数は無視します。
1 | ($n,$x,$c,@s)=@ARGV;$b[$_-$n]++for@s;$b[$_]&&print(($_+$n.' ')x$b[$_])for 0..$#b
|

sweetie089 #6628() Rating3/3=1.00
[ reply ]