Un Algoritmo que me gusta mucho es el quicksort, porque es un algoritmo por demás claro. Ya he escrito lo fácil que es implementarlo en scala, erlang, rust, haskell y lisp.
Ahora le toca a F#. Básicamente el algoritmo toma un pivot y agrupa los menores del pivot al principio y los mayores al final y aplica quicksort a estos 2 grupos. Y si la lista es vacía o tiene un elemento, ya esta ordenada.
Vamos al código:
let rec quicksort list =
match list with
| [] -> []
| pivot :: tail ->
let lower = tail |> List.filter (fun x -> x <= pivot)
let higher = tail |> List.filter (fun x -> x > pivot)
quicksort lower @ [pivot] @ quicksort higher