RosettaCodeData/Task/Quickselect-algorithm/OCaml/quickselect-algorithm.ocaml

11 lines
325 B
Plaintext

let rec quickselect k = function
[] -> failwith "empty"
| x :: xs -> let ys, zs = List.partition ((>) x) xs in
let l = List.length ys in
if k < l then
quickselect k ys
else if k > l then
quickselect (k-l-1) zs
else
x