在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4927|回复: 4

[原创] 询问perl高级排序的基本原理

[复制链接]
发表于 2013-4-22 21:09:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
最近看小骆驼书的高级排序。
书上写的有关数值排序,小弟有点不太懂perl解释器内部是如何一步一步将一个数组进行排序的。比如
@array=qw(22 11 38 17);
@sorted_array=sort {$a<=>b} @array;

运行的结果就是输出的@sorted_array=qw(11 17 22 38);
perl内如是如何进行排序的呢??

小弟的理解是:第一步,$a=22,$b=11,然后啊a<=>b发现不对,$b应该在$a的左边,然后就成了11 22 38 17
那下一步谁是a,谁是b呢?还有就是排序这四个数,perl怎么确保已经排序成功了?一共要扫描这个序列多少遍啊?

哪位大神赐教一下,万分感激。
发表于 2013-4-23 09:42:30 | 显示全部楼层
回复 1# cjf19880525


    google一下“排序算法”你就知道是怎么回事了。perl实现的排序只是采用其中一种算法罢了
 楼主| 发表于 2013-4-23 15:08:59 | 显示全部楼层
回复 2# coffeeing520


    谢谢您。
发表于 2013-4-24 14:21:24 | 显示全部楼层
本帖最后由 mtvv 于 2013-4-24 14:23 编辑

回复 1# cjf19880525





  1. #!perl
  2. use 5.16.2;
  3. my @list = qw(22 44 5 66 9 10 33);
  4. my @sorted = sort { say "\$a=$a <-> \$b=$b"; $a <=> $b;} @list;
  5. say "\@sorted = @sorted";


复制代码


结果:




  1. $a=22 <-> $b=44
  2. $a=5 <-> $b=66
  3. $a=9 <-> $b=10
  4. $a=22 <-> $b=5
  5. $a=22 <-> $b=66
  6. $a=44 <-> $b=66
  7. $a=9 <-> $b=33
  8. $a=33 <-> $b=10
  9. $a=5 <-> $b=9
  10. $a=9 <-> $b=22
  11. $a=22 <-> $b=10
  12. $a=22 <-> $b=33
  13. $a=44 <-> $b=33
  14. @sorted = 5 9 10 22 33 44 66



复制代码


每个版本如何实现是不太一样的. 我们使用脚本语言只要知道如何用,用了之后结果如何就可以了.
另外,你感觉你可能看书不是很仔细吧,这些东西书里的呀!
发表于 2013-4-25 15:30:05 | 显示全部楼层
回复 1# cjf19880525


    perldoc -f sort
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-18 20:41 , Processed in 0.018846 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表