F#的快排
F# 的快排实现起来很简单,因为集合类List里面的方法帮用户实现了大部分的代码。
下面就是就是代码:
let rec quickSort (list : int list) = match list with | [] -> [] | [single] -> [single] | head :: tail -> let leftList = tail |> List.choose(fun item -> if item <= head then Some(item) else None) let rightList = tail |> List.choose(fun item -> if item > head then Some(item) else None) quickSort(leftList) @ [head] @ quickSort(rightList)
代码里面使用了List.choose这个方法,你也可以使用List.filter方法。如果你不熟悉他们,参考F#链表——List各个函数解释。
当然,你也可以使用Array,Seq作为数据源,因为这些都可以通过各自的toList 函数转为List。如:[|1;2;3|] |> Array.toList
如果你不想使用内置的方法,可以参考一下:F# 中的异步快排 。