Clojure快速排序

QQ: 380800878, 微信: kittenll

看过Haskell的快速排序之后,真的是被折服了,简洁明了。现在用Clojure也来写一个快排,同样也是相当的简单。

1
2
3
4
5
6
7
8
(defn quick-sort [coll]
(if (empty? coll)
[]
(let [[first & r] coll]
(concat
(quick-sort (filter #(< % first) r))
[first]
(quick-sort (filter #(>= % first) r))))))

算法的定义:排过序的 List 就是令所有小于等于头部的元素在先(它们已经排过了序), 后跟大于头部的元素(它们同样已经排过了序)。