使用erlang实现的quicksort

本文介绍了一种使用Erlang实现的快速排序算法,并详细解释了其代码逻辑及递归过程,展示了Erlang简洁优雅的编程风格。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近erlang开始变得流行起来,一下是一个erlang中的quicksort的代码。
  1. %% Author: ztl
  2. %% Created: Nov 26, 2008
  3. %% Description: TODO: Add description to mylib
  4. -module(mylib).
  5. %%
  6. %% Include files
  7. %%
  8. %%
  9. %% Exported Functions
  10. %%
  11. -export([qsort/1]).
  12. %%
  13. %% API Functions
  14. %%
  15. qsort([]) -> [];
  16. qsort([Pivot|T]) ->
  17. qsort([X || X <- T, X < Pivot])
  18. ++ [Pivot] ++
  19. qsort([X || X <- T, X >= Pivot]).
  20. %%
  21. %% Local Functions
  22. %%
调用方法是:
(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]

稍微解释一下这段代码,关键部分是这一段
  1. qsort([]) -> [];
  2. qsort([Pivot|T]) ->
  3. qsort([X || X <- T, X < Pivot])
  4. ++ [Pivot] ++
  5. qsort([X || X <- T, X >= Pivot]).
这是一个函数,注意,句号表示函数的结尾。“->” 后面直到分号或者句号之前的代码,表示这个函数所执行的过程。第一句"qsort([]) -> [];"最后有一个分号。在erlang中,对于不同模式的输入参数,函数可以选择相应的方式处理,在这段代码中,如果输入的是一个空的列表,则直接返回空列表(就是代码第一句话的作用处理),如果不是,则执行
  1. qsort([Pivot|T]) ->
  2. qsort([X || X <- T, X < Pivot])
  3. ++ [Pivot] ++
  4. qsort([X || X <- T, X >= Pivot]).
在来解释一下[...],[...]表示列表,比如:
rel="File-List" href="file:///C:%5CDOCUME%7E1%5Cztl%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"> L=[23,6,2,9,27,400,78,45,61,82,14].
[]表示空的列表。

代码里有这样一段:
qsort([Pivot|T])
这个表示,qsort接受一个列表作为参数(不能为空),且将列表的第一个元素赋值给变量Pivot,剩下的元素辅助给变量T。
顺便提一句,erlang中的变量在赋值后,是不能改变的。

在来解释一下代码中的这句
  1. qsort([X || X <- T, X < Pivot]
这里就是递归调用,在qsort函数中再次调用qsort函数
[X || X <- T, X < Pivot]这样形式的代码,表示取出在T中,符合小于Pivot条件的元素组成列表X,

在分析一下整个代码,发现erlang写出的quicksort原来如此轻巧。令人赞叹。(当然,erlang的正真优势在于并行处理能力)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值