Эффективная быстрая сортировка Ocaml

Я хотел бы знать, как написать эффективную версию быстрой сортировки , где список разбивается за один проход.

У меня есть этот фрагмент кода,

    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 раза.

6
задан João Oliveira 15 May 2012 в 10:29
поделиться