Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Data.List (partition)
- average2 :: (Fractional a) => a -> a -> a
- average2 x y = (x + y) / 2
- median :: Ord a => [a] -> Maybe a
- median xs
- | even n = Nothing
- | otherwise = select (n `div` 2) xs
- where
- n = length xs
- select :: Ord a => Int -> [a] -> Maybe a
- select _ [] = Nothing
- select k (x:xs) = case compare k m of
- LT -> select k lt
- EQ -> Just x
- GT -> select (k - m - 1) gte
- where
- m = length lt
- (lt, gte) = partition (< x) xs
- main :: IO ()
- main = do
- let v = [1,2,3,4,5]
- print $ median v
Add Comment
Please, Sign In to add comment