リストが1回のパスで分割される効率的なバージョンのクイックソートを作成する方法を知りたい です。
私はこのコードの断片を持っています、
let rec quicksort' = function
[] -> []
| x::xs -> let small = List.filter (fun y -> y < x ) xs
and large = List.filter (fun y -> y > x ) xs
in quicksort' small @ (x :: quicksort' large);;
しかし、ここではリストを 1 回以上調べています (小規模と大規模で 2 回のクイックソートを呼び出しています)。
アイデアは、リストに何度もアクセスせずに、1 つのステップで実行することです。