西西软件下载最安全的下载网站、值得信赖的软件下载站!

首页编程开发其它知识 → 用Erlang实现快速排序算法

用Erlang实现快速排序算法

相关软件相关文章发表评论 来源:西西整理时间:2012/12/10 17:17:44字体大小:A-A+

作者:西西点击:0次评论:0次标签: 算法

  • 类型:编程辅助大小:1.0M语言:中文 评分:9.0
  • 标签:
立即下载

Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此非常适 合于构建分布式,实时软并行计算系统。

使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。进程间上下文切换对于Erlang来说仅仅 只是一两个环节,比起C程序的线程切换要高效得多得多了。

使用Erlang来编写分布式应用要简单的多,因为它的分布式机制是透明的:对于程序来说并不知道自己是在分布式运行。

Erlang运行时环境是一个虚拟机,有点像Java虚拟机,这样代码一经编译,同样可以随处运行。它的运行时系统甚至允许代码在不被中断的情况下更新。另外如果你需要更高效的话,字节代码也可以编译成本地代码运行。

Yaws: 一个Erlang写的服务器,据说并发能是apache的15倍

排序算法的原理无需多说,直接上代码

1 -module(quicksort).
2 -export([start/1]).
3
4 %% 程序入口
5 %% List:用户输入的待排序的数值列表
6 start(List) ->
7     SortedList = calu(List),
8     io:format("sorted list:~w~n", [SortedList]).
9
10 %% 得到排序后的数值列表
11 calu([Key|RestList]) ->
12     {LittleList, GreatList} = calu_sort(Key, RestList, [], []),
13     calu(LittleList) ++ [Key] ++ calu(GreatList);
14 calu([]) ->
15     [].
16
17 %% 快速排序算法
18 %% Key:列表中的第一个元素
19 %% [Element|RestElements]:列表中的其它元素
20 %% LittleList:小于等于Key的数值组成的列表
21 %% GreatList:大于Key的数值组成的列表
22 calu_sort(Key, [Element|RestElements], LittleList, GreatList) ->
23     if
24         Element =< Key ->
25             calu_sort(Key, RestElements, [Element] ++ LittleList, GreatList);
26         Element > Key ->
27             calu_sort(Key, RestElements, LittleList, [Element] ++ GreatList)
28     end;
29 calu_sort(_Key, [], LittleList, GreatList) ->
30     {LittleList, GreatList}.

注意事项:代码第一次运行的时候,结果怎么都不对,调试之后发现问题出在24行的Element =< Key(变量)表达式,写成了Element =< key(原子),由于Element是数值,key是原子,根据Erlang的排序规则,数值小于原子,所以结果不正确。由于变量名必须以大写开始,需要按住shirt键输入,有时候不注意没按住shirt就变成了原子。

这种问题在其它编程语言中是很难出现的,对于静态类型语言,直接就给出未定义符号的编译错误,对于动态语言,不同类型的数据一般是不予比较的。所以在Erlang编程中要万分小心,不要把变量名写成原子,否则会出现编译通过而运行时出现各种异常结果的情况

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(0)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)
    推荐文章

    没有数据