Chinaunix首页 | 论坛 | 博客
  • 博客访问: 34611
  • 博文数量: 14
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 150
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-09 09:40
文章分类

全部博文(14)

文章存档

2011年(1)

2008年(13)

我的朋友
最近访客

分类:

2008-07-24 15:23:15

这里说的不是对数值型数组的排序,因为它们的排序用@new=sort @old就可以了,没什么可以加速的

我说的是非数值型的排序,比如有个索引数组,数组里每个元素都是字符串,每个字符串作为参数传递进入ask_for_result函数后会返回一个值,我们要根据这个值的大小来对索引数组进行排序。

一般写法为:
@new=sort {ask_for_result($a) cmp ask_for_result($b)} @old;

改进写法为
@new=
map $_->[0],
sort {$a->[1] cmp $b->[1]}
map [$_,ask_for_result($_)],
@old;

减少了对ask_for_result函数的调用次数,这个方法叫做Schwartzian变换
阅读(1062) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~