fork(1) download
  1. trait Ord[T] {
  2. def lt(x: T, y: T): Boolean
  3. }
  4.  
  5. object Ord {
  6. def sort[T](xs: Seq[T])(implicit ord: Ord[T]): Seq[T] =
  7. xs match {
  8. case Seq() => Seq.empty
  9. case h +: t =>
  10. val (lesser, greater) = t.partition(ord.lt(_, h))
  11. sort(lesser) ++ Seq(h) ++ sort(greater)
  12. }
  13. }
  14.  
  15. object Main extends App {
  16. implicit val defaultOrd = new Ord[Int] {
  17. override def lt(x: Int, y: Int) = x < y
  18. }
  19.  
  20. val reverseOrd = new Ord[Int] {
  21. override def lt(x: Int, y: Int) = x > y
  22. }
  23.  
  24. println(Ord.sort(Seq(3, 1, 2)))
  25. println(Ord.sort(Seq(3, 1, 2))(reverseOrd))
  26. }
  27.  
Success #stdin #stdout 0.38s 382080KB
stdin
Standard input is empty
stdout
List(1, 2, 3)
List(3, 2, 1)