dcramer

Listing 16.1: A merge sort function for lists

Jan 24th, 2012
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 0.58 KB | None | 0 0
  1. def msort[T](less: (T,T) => Boolean)(xs: List[T]): List[T] =
  2.   {
  3.     def merge(xs: List[T], ys: List[T]): List[T] =
  4.       (xs, ys) match {
  5.     case (Nil, _) => ys
  6.     case (_, Nil) => xs
  7.     case (x :: xs1, y :: ys1) =>
  8.           if (less(x, y)) x :: merge(xs1, ys)
  9.           else y :: merge(xs, ys1)
  10.       }
  11.     val n = xs.length / 2
  12.     if ( n == 0 ) xs
  13.     else {
  14.       val (ys, zs ) = xs splitAt n
  15.       merge(msort(less)(ys), msort(less)(zs))
  16.     }
  17.   }
  18.  
  19. scala> msort((x: Int, y: Int) => x < y)(List(5, 7, 1, 3 ))
  20. res0: List[Int] = List(1, 3, 5, 7)
  21.  
  22. From Programming in Scala, p 321
Advertisement
Add Comment
Please, Sign In to add comment