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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值