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

11 lines
325 B
Text
Raw Permalink Normal View History

2015-02-20 09:02:09 -05:00
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