Erlang 顺序型编程 练习 快速排序qsort 性能问题 及其他发现

手头有一本《Erlang程序设计》(Programming Erlang Software for a Concurrent Word)。08年看草草看过一下。最近有空,打算以打阵地战的方式看此书。边看,边练习。

顺序型编程的章节中,有快速排序的示例代码,如下qs1:

书中提到,这段代码比较简洁、易懂,但是效率不好,除此之外,还发现了更严重的问题。(见后续的测试。)

既然这种方式不是最优,就参考网上找的例子(http://en.literateprograms.org/Quicksort_(Erlang)很不错的网站)另外写了一个快速排序qs2,两个实现方式同写在qsort模块中。

对应的测试代码。性能测试部分加入了lists模块自带的sort函数,做对比。

在性能测试中,如果对5000各元素的列表进行排序,结果如下

明显qs2的性能优于qs1,而lists模块自带的sort函数耗时更短。

如果用更大的列表(例如10000个元素的)去测试,则,qs1会挂掉(“Crash dump was written to: erl_crash.dumpeheap_alloc: Cannot allocate 583848200 bytes of memory (of type "heap").”)。至于挂掉的深层原理,后续再探讨。

 

总结:

  1. 在一个列表尾部添加元素,比在列表头部添加元素效率要低很多。
  2. erlang自带的排序函数要比自定义的函数效率高很多。

转载于:https://www.cnblogs.com/AboutMe/archive/2010/12/27/1917573.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值