Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
11
Добавлен:
28.06.2014
Размер:
1 Кб
Скачать
--2.19. Сортировка. Описать алгоритм сортировки списка методом слияния двух списков (исходный список делится на два, они сортируются, после чего объединяются). Порядок сортировки задаётся функцией типа f :: a -> a -> bool, возвращающей true, если элементы находятся в правильном порядке.

--Сложность n*log(n)
f217 :: [a] -> (a -> a-> Bool) -> [a]
f217 [] _ = []
f217 (x:[]) _  = [x]
f217 xs fun = let (p:q:ps) = (f217_2 xs True [] [])
               in (f217_1 (f217 p fun) (f217 q fun) fun)
               
--Разбиение 
--Сложность n
f217_2  [] _ l r = [l, r]
f217_2 (x:xs) f l r = if f then
                             f217_2 xs (not f) (x:l) r
                           else
                             f217_2 xs (not f) l (x:r)
                           
-- Слияние
-- сложность n
f217_1  [] ys _ = ys
f217_1 xs [] _ = xs
f217_1 (x:xs) (y:ys) f = if (f y x) then
                                     y:(f217_1 (x:xs) ys f)
                                   else 
                                     x:(f217_1 xs (y:ys) f)
                                      
-- пример функции
f a b = a < b                                     
Соседние файлы в папке 2