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
原创粉丝点击