首页 > 其他 > 详细

用Scala编写MergeSort

时间:2015-10-05 06:58:53      阅读:260      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!