let rec quicksort list = match list with | [] -> [] // Empty list | firstEl::tail -> let smallerEls = tail |> List.filter (fun e -> e < firstEl) |> quicksort let larger = tail |> List.filter (fun e -> e >= firstEl) |> quicksort smallerEls @ [firstEl] @ larger printfn "%A" (quicksort [1;5;23;18;9;1;3])