用排序数字值作为数组的索引,其值来表示此数排序后的位置,perl代码如下:
#!perl -wuse strict; sub ProduceSortNumRecord{ my @SortNumRecord; my $EachNum; my $Index; foreach $EachNum (@_) { if (defined($SortNumRecord[$EachNum])) { $SortNumRecord[$EachNum]++; } else { $SortNumRecord[$EachNum] = 1; } } foreach $Index (1..$#SortNumRecord) { $SortNumRecord[$Index] += (defined($SortNumRecord[$Index-1])?$SortNumRecord[$Index-1]:0); } return /@SortNumRecord;}
sub SortAtSpace{ my @SortResult; my $AsortNum; # @_ contain all nums to sort; my $RefSortNumRecord = &ProduceSortNumRecord(@_); foreach $AsortNum (@_) { $SortResult[$RefSortNumRecord->[$AsortNum]-1] = $AsortNum; $RefSortNumRecord->[$AsortNum]--; } return @SortResult;}
sub PrintArray{ print "Array Num is ".scalar(@_)."/n"; print "Array Value is:/n("; foreach (0..$#_-1) { print $_[$_].","; }
print $_[$#_].")";}
my @SortNum = (23,45,12,45,3,3,6,7,9,10);print "Num to Sort:",@SortNum,"/n";&PrintArray(&SortAtSpace(@SortNum));
