Advertisement
Guest User

Untitled

a guest
Jul 14th, 2014
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 0.66 KB | None | 0 0
  1. package br.edu.ifpb.pod.MergeSort
  2.  
  3. object MergeSort {
  4.   def mergeSort[T](pred: (T, T) => Boolean)(xs: List[T]): List[T] = {
  5.     def merge(ls: List[T], rs: List[T]): List[T] = (ls, rs) match {
  6.       case (List(), _) => rs
  7.       case (_, List()) => ls
  8.       case (l :: ls1, r :: rs1) =>
  9.         if (pred(l, r)) l :: merge(ls1, rs)
  10.         else r :: merge(ls, rs1)
  11.     }
  12.  
  13.     val m = xs.length / 2
  14.     if (m == 0) xs
  15.     else {
  16.       val (l, r) = xs splitAt m
  17.       merge(mergeSort(pred)(l), mergeSort(pred)(r))
  18.     }
  19.   }
  20.  
  21.   def main(args: Array[String]) {
  22.     val intSort = mergeSort((_: Int) < (_: Int)) _
  23.     println(intSort(List(4, 2, 1, 3)))
  24.   }
  25.  
  26. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement