Haskell快排代码
来源:互联网 发布:清理恶意软件 编辑:程序博客网 时间:2024/06/09 15:36
haskell这段递归快排很短,而且还可以处理不同类型的数据,很优雅。
qSort ::(Ord a)=>[a]->[a]qSort []=[]qSort (x:xs)= let smallerNum=filter (<=x) xs largerNum=filter (>x) xs --[a|a<-xs,a>x]这里也可用列表推导式来写 in qSort smallerNum++[x]++qSort largerNum
haskell中有一个“类型类”的概念,类比java来说,和类的概念倒相差甚远,反而和接口的概念比较相似。上面的快排代码自带泛型属性,可以对数字排序也可以对字符排序(凡是属于Ord的实例的类型都可以被排序),如果在类型限定中写上Num a那么就只能对数字进行排序了。
更新一下:上面这段代码filter了两次,那么也可以写的更简洁,只filter一次
qSrot ::(Ord a)=>[a]->[a]qSort []=[]qSort (x:xs)=qSrot l ++ [x] ++qSort r where (l,r)=partition (<x) xs
这样代码就更短了,很精巧,代码完全在描述自己在做什么而不是怎么做。可以看出haskell真的是高度抽象啊
0 0
- Haskell快排代码
- haskell实现快排的代码为什么这么短
- 快排代码
- 快排代码 《数据结构》
- 快排代码
- 快排代码示例
- 快排代码示例
- 一个简单的Haskell和Ruby的快排
- C++快排实现代码
- 快排方法代码记录
- 基2快排原理与代码
- 基2快排原理与代码
- 快排c代码实现
- 二行代码实现快排
- 快排和归并排序部分代码
- 一行python代码搞定快排
- 快排的方法与代码
- ios代码示例 实现快排算法
- java多线程编程核心技术5-Timer定时器
- 如何开启Linux双网卡的转发功能
- 机器学习 基本算法 (5 (adaboost、 Gradient boost
- Unity-使用Shader裁剪图片
- 你真的了解volatile关键字吗?深入解析java并发与volatile
- Haskell快排代码
- HandlerThread用法
- MongoDB基本管理命令
- 第一个OpenGL出现无法识别glGenVertexArrays问题
- 算典05_例题_01_UVA-10474
- java多线程编程核心技术6-单例模式与多线程
- BMP文件读写以及RGB与YUV转换
- [李景山php]每天laravel[027]-laravel 基础知识 --- 请求
- 大白话系列之C#委托与事件讲解(三)