使用erlang实现的quicksort
来源:互联网 发布:如何生成淘宝口令 编辑:程序博客网 时间:2024/04/28 02:58
最近erlang开始变得流行起来,一下是一个erlang中的quicksort的代码。
调用方法是:
(test@ibm-f618075b95a)1> L=[23,6,2,9,27,400,78,45,61,82,14].
[23,6,2,9,27,400,78,45,61,82,14]
(test@ibm-f618075b95a)2> mylib:qsort(L).
[2,6,9,14,23,27,45,61,78,82,400]
稍微解释一下这段代码,关键部分是这一段
这是一个函数,注意,句号表示函数的结尾。“->” 后面直到分号或者句号之前的代码,表示这个函数所执行的过程。第一句"qsort([]) -> [];"最后有一个分号。在erlang中,对于不同模式的输入参数,函数可以选择相应的方式处理,在这段代码中,如果输入的是一个空的列表,则直接返回空列表(就是代码第一句话的作用处理),如果不是,则执行
在来解释一下[...],[...]表示列表,比如:
L=[23,6,2,9,27,400,78,45,61,82,14].
[]表示空的列表。
代码里有这样一段:
qsort([Pivot|T])
这个表示,qsort接受一个列表作为参数(不能为空),且将列表的第一个元素赋值给变量Pivot,剩下的元素辅助给变量T。
顺便提一句,erlang中的变量在赋值后,是不能改变的。
在来解释一下代码中的这句
这里就是递归调用,在qsort函数中再次调用qsort函数
[X || X <- T, X < Pivot]这样形式的代码,表示取出在T中,符合小于Pivot条件的元素组成列表X,
在分析一下整个代码,发现erlang写出的quicksort原来如此轻巧。令人赞叹。(当然,erlang的正真优势在于并行处理能力)
- %% Author: ztl
- %% Created: Nov 26, 2008
- %% Description: TODO: Add description to mylib
- -module(mylib).
- %%
- %% Include files
- %%
- %%
- %% Exported Functions
- %%
- -export([qsort/1]).
- %%
- %% API Functions
- %%
- qsort([]) -> [];
- qsort([Pivot|T]) ->
- qsort([X || X <- T, X < Pivot])
- ++ [Pivot] ++
- qsort([X || X <- T, X >= Pivot]).
- %%
- %% Local Functions
- %%
(test@ibm-f618075b95a)1> L=[23,6,2,9,27,400,78,45,61,82,14].
[23,6,2,9,27,400,78,45,61,82,14]
(test@ibm-f618075b95a)2> mylib:qsort(L).
[2,6,9,14,23,27,45,61,78,82,400]
稍微解释一下这段代码,关键部分是这一段
- qsort([]) -> [];
- qsort([Pivot|T]) ->
- qsort([X || X <- T, X < Pivot])
- ++ [Pivot] ++
- qsort([X || X <- T, X >= Pivot]).
- qsort([Pivot|T]) ->
- qsort([X || X <- T, X < Pivot])
- ++ [Pivot] ++
- qsort([X || X <- T, X >= Pivot]).
L=[23,6,2,9,27,400,78,45,61,82,14].
[]表示空的列表。
代码里有这样一段:
qsort([Pivot|T])
这个表示,qsort接受一个列表作为参数(不能为空),且将列表的第一个元素赋值给变量Pivot,剩下的元素辅助给变量T。
顺便提一句,erlang中的变量在赋值后,是不能改变的。
在来解释一下代码中的这句
- qsort([X || X <- T, X < Pivot]
[X || X <- T, X < Pivot]这样形式的代码,表示取出在T中,符合小于Pivot条件的元素组成列表X,
在分析一下整个代码,发现erlang写出的quicksort原来如此轻巧。令人赞叹。(当然,erlang的正真优势在于并行处理能力)
- 使用erlang实现的quicksort
- QuickSort的实现2
- quicksort的实现
- [算法]QuickSort的Java实现
- MapReduce的Erlang实现
- [Erlang 0032] Erlang Binary的内部实现
- [Erlang]Erlang的干将莫邪:Rebar的使用
- 使用C++实现快速排序QuickSort
- Erlang 函数的使用
- QuickSort实现
- 使用callback实现自定义的erlang行为模式
- 我自己实现的quickSort算法
- 快速排序(Quicksort)的Javascript实现
- 快速排序(Quicksort)的Javascript实现
- QuickSort的基本CPU实现代码
- 快速排序(Quicksort)的Javascript实现
- quickSort 的递归与迭代实现
- C++ 快速排序QuickSort的实现
- c#语言基础(4)----索引器
- 使用JeCat PHP Toolbox 做网站留言板
- GC.GetTotalMemory方法
- Visual Studio.Net 快捷键表
- AJAX在VS2005中的简单应用
- 使用erlang实现的quicksort
- 远程连接数据库
- gcc command argument
- JavaScript中的面向对象----继承
- vc响应最大化最小化按钮的事件或消息
- 十个故事
- java 图片缩放
- 人生就像等公交
- FDD还是TDD?