Haskell快排代码

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真的是高度抽象啊

猜你喜欢

转载自blog.csdn.net/u010742342/article/details/68946358
今日推荐