Guest User

Untitled

a guest
Nov 21st, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.63 KB | None | 0 0
  1. def sort[T](compare: (T, T) => Boolean)(list: List[T]): List[T] = {
  2. def merge(leftList: List[T], rightList: List[T]): List[T] = (leftList, rightList) match {
  3. case (_, Nil) => leftList
  4. case (Nil, _) => rightList
  5. case (firstLeftElement :: newLeftList, firstRightElement :: newRightList) =>
  6. if(compare(firstLeftElement, firstRightElement)) firstLeftElement :: merge(newLeftList, rightList)
  7. else firstRightElement :: merge(leftList, newRightList)
  8. }
  9.  
  10. val middle = list.length / 2
  11. if (middle == 0) list
  12. else {
  13. val (left, right) = list.splitAt(middle)
  14. merge(sort(compare)(left), sort(compare)(right))
  15. }
  16. }
Add Comment
Please, Sign In to add comment