• Source
    1. object Main extends App {
    2. def mergeSort[T](xs:List[T])(implicit view$1:(T) => Ordered[T]):List[T] = {
    3. val n = xs.length/2;
    4. if(n==0) xs
    5. else {
    6. def merge(xs:List[T], ys:List[T]):List[T] = (xs, ys) match {
    7. case (Nil, ys) => ys
    8. case (xs, Nil) => xs
    9. case(x::xs1, y::ys1) =>
    10. if(x<y) x ::merge(xs1, ys)
    11. else y::merge(xs, ys1)
    12. }
    13. val (left, right) = xs splitAt(n)
    14. merge(mergeSort(left), mergeSort(right))
    15. }
    16. }
    17.  
    18. val l = List(9,8,7,6,5,4,3,2,1);
    19. val sortedList = mergeSort(l)
    20. sortedList.foreach(println)
    21.  
    22. val l1 = List(9.1,8.4,7.1,6.5,5.2,4.9,3.3,2.6,1.7);
    23. val sortedList1 = mergeSort(l)
    24. sortedList1.foreach(println)
    25.  
    26. case class User(n:Int) extends Ordered[User] {
    27. def compare(that:User) = this.n - that.n
    28. }
    29.  
    30. val u1 = User(1);val u2 = User(2);val u3 = User(3);val u4 = User(4);val u5 = User(5);val u6 = User(6);
    31. val sortedUsers = mergeSort(List(u2,u4,u1,u6,u5,u3))
    32. println("Printing sorted Useres => ")
    33. sortedUsers.foreach{u => println(u.n)}
    34. }
    35.