quickselect-0.1.0.0

Copyright(c) Donnacha Oisín Kidney 2018
LicenseMIT
Maintainermail@doisinkidney.com
Stabilityexperimental
Portabilityportable
Safe HaskellNone
LanguageHaskell2010

Data.Select.Median

Description

This module provides an implementation of median-of-medians on boxed vectors. As a selection algorithm, it has optimal \(\mathcal{O}(n)\) worst-case time, however it is usually beaten in practice by quickselect (which has \(\mathcal{O}(n^2)\) worst-case time). For an algorithm with the same worst-case time, but better general performance, see Data.Select.Intro.

Synopsis

Documentation

selectBy :: (a -> a -> Bool) -> Int -> Vector a -> a Source #

\(\mathcal{O}(n)\). Find the nth item, ordered by the supplied relation.

i >= 0 && i < length xs ==> sort xs !! i === selectBy (<=) i (Vector.fromList xs)

select :: Ord a => Int -> Vector a -> a Source #

\(\mathcal{O}(n)\). Find the nth smallest item in the vector.

>>> select 4 (Vector.fromList "this is an example")
'a'
>>> select 3 (Vector.fromList [0,1,4,2,3,5,6])
3