-- ****************************************************************
-- Sortieren mit Haskell
-- ****************************************************************

-- ------------------------------------------------------------
-- Bubble Sort
-- Die Funktion bubble ändert eine Liste so um, dass anschließend das größte
-- Element ganz am Ende ist.
--
-- Beispiel:
-- bubble [4,9,3,2,7,2,5,6] ---> [4,3,2,7,2,5,6,9]
-- ------------------------------------------------------------
bubble :: Ord a => [a] -> [a]
bubble [] = []
bubble [x] = [x]
bubble (x:y:xs)
	| x > y = y : bubble (x:xs)
	| otherwise = x : bubble (y:xs)

-- ---------------------------------------------------------------
-- Merge Sort
-- Die Funktion merge (”verschmelzen, mischen”) erhält zwei bereits sortierte
-- Listen und fügt diese zu einer einzigen, sortierten Liste zusammen.
--
-- merge:: Ord a => [a]->[a]->[a]
--
-- Beispiel:
-- merge "aeiou" "bdhkmrs" = "abdehikmorsu"
-- ---------------------------------------------------------------
merge:: Ord a => [a]->[a]->[a]
merge [] ys = ys
merge (x:xs) [] = x:xs
merge (x:xs) (y:ys)
--	noch zu ergänzen
--	noch zu ergänzen

-- ---------------------------------------------------------------
-- xMal schreiben
-- Die Funktion schreibe erzeugt eine Liste, die
-- einen Text xs n mal enthält. Werte aus: schreibe "x" 7
--
-- Beispiel:
-- schreibe "ich" 5 = "ichichichichich"
-- ---------------------------------------------------------------

schreibe :: [a]->Int->[a]
schreibe xs 0 = []
schreibe xs 1 = xs
schreibe xs n
	| mod n 2== 0 = ys++ys
	| otherwise = xs++schreibe xs (n-1)
	where ys = schreibe xs (div n 2)
                                                                                                                                                                                                                                                                                                                                                                          
