免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2215 | 回复: 4
打印 上一主题 下一主题

子程序每次调用都会创建一个数组,有必要在子程序结束前清空吗?(附上计数排序的代码) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-27 09:16 |只看该作者 |倒序浏览
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use 5.010;
  4. sub counting_sort(\@){
  5.     my $a = shift @_;
  6.     my @arr = @$a;
  7.     my @count;
  8.     my @result;
  9.     for(0..$#arr){
  10.         $count[$arr[$_]] ++;  #count[i] 包含等于i的元素个数
  11.     }
  12.     for(1..$#count){
  13.         $count[$_] += $count[$_-1] ; #count[i] 包含小于或等于i的元素个数
  14.     }
  15.     for(0..$#arr){
  16.         $result[$count[$arr[$_]]-1] = $arr[$_];
  17.         $count[$arr[$_]] -- ;
  18.     }
  19.     return @result;
  20. }
  21. my @array = qw/2 5 3 0 2 3 0 3/;
  22. my @temp = counting_sort(@array);
  23. say "@temp";# print  0 0 2 2 3 3 3 5
复制代码
用Perl写了一个 计数排序,不知道这样写有没有不对的地方?
另外,Perl子程序每次调用的时候都会创建一个数组,有必要在子程序结束前清空吗?

论坛徽章:
0
2 [报告]
发表于 2011-04-27 09:55 |只看该作者
回复 1# qq64878641
  1. print sort { $a <=> $b } qw/2 5 3 0 2 3 0 3/
复制代码
就排序嘛 写那么多干嘛

论坛徽章:
0
3 [报告]
发表于 2011-04-27 17:57 |只看该作者
回复  qq64878641 就排序嘛 写那么多干嘛
guap514 发表于 2011-04-27 09:55



    呵呵。幽默! 我用Perl写排序不是为了给一串数排个序,而是在学习算法。
    这个排序我是根据《算法导论》上的伪代码用Perl敲的。 顺便学习下Perl的语法!

论坛徽章:
0
4 [报告]
发表于 2011-04-27 19:07 |只看该作者
呵呵。幽默! 我用Perl写排序不是为了给一串数排个序,而是在学习算法。
    这个排序我是根据《 ...
qq64878641 发表于 2011-04-27 17:57



    即便如此,也一点都不幽默。

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
5 [报告]
发表于 2011-04-28 09:56 |只看该作者
本帖最后由 jason680 于 2011-04-28 09:57 编辑
用Perl写了一个 计数排序,不知道这样写有没有不对的地方?
另外,Perl子程序每次调用的时候都会创建一个数 ...
qq64878641 发表于 2011-04-27 09:16


改一下...
  1. #!/usr/bin/perl

  2. use strict;
  3. use warnings;
  4. use 5.010;

  5. sub counting_sort{
  6.     my @arr = @_;
  7.     my @count;
  8.     my @result;
  9.     my $sCnt;
  10.    
  11.     for(@arr){
  12.         $count[$_]++; #count[i] 等于i的元素
  13.     }
  14.     # @count = (2,'', 2, 3,'', 1)
  15.     #      下标  0  1  2  3  4  5

  16.     $sCnt = 0; # 下标
  17.     for(@count){
  18.         $_ ||= 0;
  19.         push @result,($sCnt) x $_;
  20.         $sCnt++
  21.     }

  22.     return @result;
  23. }
  24. my @array = qw/2 5 3 0 2 3 0 3/;
  25. my @temp = counting_sort(@array);
  26. say "@temp";# print 0 0 2 2 3 3 3 5
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP