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# 中的异步快排 。

原文地址:https://www.cnblogs.com/FsharpZack/p/2780802.html