Sync
This commit is contained in:
parent
6f050a029e
commit
776bba907c
3887 changed files with 59894 additions and 7280 deletions
|
|
@ -0,0 +1,33 @@
|
|||
#!/usr/bin/perl
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
sub radix {
|
||||
my @tab = ([@_]);
|
||||
|
||||
my $max_length = 0;
|
||||
length > $max_length and $max_length = length for @_;
|
||||
$_ = sprintf "%0${max_length}d", $_ for @{ $tab[0] }; # Add zeros.
|
||||
|
||||
for my $pos (reverse -$max_length .. -1) {
|
||||
my @newtab;
|
||||
for my $bucket (@tab) {
|
||||
for my $n (@$bucket) {
|
||||
my $char = substr $n, $pos, 1;
|
||||
$char = -1 if '-' eq $char;
|
||||
$char++;
|
||||
push @{ $newtab[$char] }, $n;
|
||||
}
|
||||
}
|
||||
@tab = @newtab;
|
||||
}
|
||||
|
||||
my @return;
|
||||
my $negative = shift @tab; # Negative bucket must be reversed.
|
||||
push @return, reverse @$negative;
|
||||
for my $bucket (@tab) {
|
||||
push @return, @{ $bucket // [] };
|
||||
}
|
||||
$_ = 0 + $_ for @return; # Remove zeros.
|
||||
return @return;
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
use Test::More tests => 1000;
|
||||
|
||||
for (1 .. 1000) {
|
||||
my @l = map int rand(2000) - 1000, 0 .. 20;
|
||||
is_deeply([radix(@l)], [sort { $a <=> $b } @l]);
|
||||
}
|
||||
|
|
@ -40,7 +40,7 @@ def split_by_sign(a_list):
|
|||
|
||||
def radixSort(a_list, base):
|
||||
# there are as many passes as there are digits in the longest number
|
||||
passes = int(log(maxAbs(a_list), base) + 1)
|
||||
passes = int(round(log(maxAbs(a_list), base)) + 1)
|
||||
new_list = list(a_list)
|
||||
for digit_num in range(passes):
|
||||
new_list = merge(split(new_list, base, digit_num))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue