码迷,mamicode.com
首页 > 其他好文 > 详细

用Scala编写MergeSort

时间:2015-10-05 07:01:45      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

object MergeSort {
  def msort[T](less: (T, T) => Boolean )(xs: List[T]): List[T] = {

    def merge(xs: List[T], ys: List[T]): List[T] = {
      (xs, ys) match {
        case (Nil, _) => ys
        case (_, Nil) => xs
        case (x :: xs1, y :: ys1) =>
          if (less(x, y)) x :: merge(xs1, ys)
          else y :: merge(xs, ys1)
      }
    }

    val n = xs.length / 2;
    if (n == 0 ) xs
    else {
      val (ys, zs) = xs.splitAt(n)    // or "xs splitAt n"
      merge(msort(less)(ys), msort(less)(zs))
    }
  }

  def main(argv: Array[String]): Unit = {
    def compare(left: Int, right: Int): Boolean = {
      left <= right
    }
    val result = msort((x: Int, y: Int) => x < y)(List(9,8,7,6,5,4,3,2,1))
    println(result)
  }
}

摘自 《Programming in Scala》

用Scala编写MergeSort

标签:

原文地址:http://www.cnblogs.com/ilovexiao77/p/4855297.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!