RosettaCodeData/Task/Quickselect-algorithm/Haskell/quickselect-algorithm.hs

14 lines
399 B
Haskell

import Data.List (partition)
quickselect :: Ord a => Int -> [a] -> a
quickselect k (x:xs) | k < l = quickselect k ys
| k > l = quickselect (k-l-1) zs
| otherwise = x
where (ys, zs) = partition (< x) xs
l = length ys
main :: IO ()
main = do
let v = [9, 8, 7, 6, 5, 0, 1, 2, 3, 4]
print $ map (\i -> quickselect i v) [0 .. length v-1]