Sort.hs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. module Sort where
  2. -- Aufgabe 2
  3. -- insert list el: sorts an elmenet el into a sorted list
  4. insert :: (Ord t) => [t] -> t -> [t]
  5. insert [] x = [x]
  6. insert [a] x
  7. | x < a = [x, a]
  8. | otherwise = [a, x]
  9. insert (a:b:qs) x
  10. | x < a = [x,a,b] ++ qs
  11. | x < b = [a,x,b] ++ qs
  12. | otherwise = [a,b] ++ insert qs x
  13. -- sortH q r: Sorts an unsorted list r into a sorted list q
  14. insertH :: (Ord t) => [t] -> [t] -> [t]
  15. insertH q [] = q
  16. insertH q [r] = insert q r
  17. insertH q (r:rest) = insertH (insert q r) rest
  18. -- insertSort list: sorts list
  19. insertSort :: (Ord t) => [t] -> [t]
  20. insertSort [] = []
  21. insertSort [a] = [a]
  22. insertSort (a:qs) = insertH [a] qs
  23. -- Aufgabe 3
  24. merge :: (Ord t) => [t] -> [t] -> [t]
  25. merge [] x = x
  26. merge x [] = x
  27. merge (x:xs) (y:ys)
  28. | x <= y = x : merge xs (y:ys)
  29. | otherwise = y : merge ys (x:xs)
  30. mergeSort :: (Ord t) => [t] -> [t]
  31. mergeSort [] = []
  32. mergeSort [x] = [x]
  33. mergeSort xs = merge (mergeSort top) (mergeSort bottom) where
  34. (top, bottom) = splitAt (div (length xs) 2) xs
  35. -- Aufgabe 4
  36. -- Teste
  37. isSorted :: (Ord t) => [t] -> Bool
  38. isSorted [] = True
  39. isSorted [a] = True
  40. isSorted (a:b:xs)
  41. | (a <= b) && isSorted xs = True
  42. | otherwise = False
  43. insertSortedIsSorted :: (Ord t) => [t] -> Bool
  44. insertSortedIsSorted xs = isSorted(insertSort xs)
  45. mergeSortedIsSorted :: (Ord t) => [t] -> Bool
  46. mergeSortedIsSorted xs = isSorted(mergeSort xs)