用排序数字值作为数组的索引,其值来表示此数排序后的位置,perl代码如下:
?
#!perl -w
use 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,3,6,7,9,10);print "Num to Sort:",@SortNum,"/n";&PrintArray(&SortAtSpace(@SortNum));