11 lines
325 B
Text
11 lines
325 B
Text
|
|
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
|