看见一道排序题,练练手。

(编程题)100万个数据,数据值在0~65535之间,请用尽可能少的内存和最快的速度从小到大排序(10分)

 

#!perl -w
use strict;
my @ArrayData = (1,2,2,5,6,3,55,555,33,22,33,78,545,23,2,2,234,234,234,7,90,23,234,34,2,775,65);
&Sort(@ArrayData);

my @TempArray;
sub Sort()
{
 my (@Array) = @_;
 foreach my $no  (@Array)
 {
  print "$no\n";
  if (defined ($TempArray[$no]))
  {
   $TempArray[$no]++;
  }
  else
  {
   $TempArray[$no]=1;
  }
 }
}
my $Number = $#TempArray;
#print "$Number:  @TempArray \n";
my $NumberIndex = 0;
for(;$NumberIndex<$Number;$NumberIndex++)
{
  if (defined ($TempArray[$NumberIndex]))
  {
   print "$NumberIndex," x $TempArray[$NumberIndex];
  }
}
if (defined ($TempArray[$NumberIndex]) && $TempArray[$NumberIndex]>1)
{
 print "$NumberIndex," x ($TempArray[$NumberIndex]-1);
}
if (defined ($TempArray[$NumberIndex]))
{
 print "$NumberIndex \n";
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值