最快的排序方法,以空间耗费为代价!!

    技术2024-12-05  53

    用排序数字值作为数组的索引,其值来表示此数排序后的位置,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));

    最新回复(0)