@array = (1,4,5,6);
@array = &RadixSort(@array);
print("Sort: @array\n");
sub RadixSort{
my(@array) = @_;
$arrayLength = @array;
if($arrayLength < 2){
return (@array);
}
@arrayTemp = @array;
#寻找最大值
$max = $array[0];
for($i = 0; $i < $arrayLength; $i++){
if($array[$i]
> $max){
$max
= $array[$i];
}
}
$exp = 1;
#开始排序
while(int($max / $exp) > 0){
@bucket
= (0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
#计算每个桶中应该有多少个数
for($i
= 0; $i < $arrayLength; $i++){
$bucket[int($array[$i]
/ $exp) % 10]++;
}
#计算每个桶比自身小的数个数+桶自身个数
for($i
= 1; $i < 10; $i++){
$bucket[$i]
+= $bucket[$i-1];
}
for($i
= $arrayLength-1; $i >= 0; $i--){
$arrayTemp[--$bucket[int($array[$i]
/ $exp) % 10]] = $array[$i];
}
for($i
= 0; $i < $arrayLength; $i++){
$array[$i]
= $arrayTemp[$i];
}
$exp
= $exp * 10;
}
return (@array);
};