Implementando uma versão recursiva final da função do tipo quicksort no F # / OCaML
É possível implementar uma versão recursiva final do algoritmo de classificação rápida (via padrão de continuação)? E se for, como implementá-lo?
Versão normal (não otimizada):
let rec quicksort list =
match list with
| [] -> []
| element::[] -> [element]
| pivot::rest -> let ``elements smaller than pivot``, ``elements larger or equal to pivot``=
rest |> List.partition(fun element -> element < pivot)
quicksort ``elements smaller than pivot`` @ [pivot] @ quicksort ``elements larger or equal to pivot``