用Scala编写MergeSort

本文介绍了使用Scala语言实现归并排序的方法,并给出了具体的代码示例。通过递归将列表分成更小的部分进行排序,然后合并这些部分来完成整个排序过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 compareFunc(left: Int, right: Int): Boolean = {
      left <= right
    }

    // 也可以换一种写法
    // val result = msort(compareFunc, List(9,8,7,6,5,4,3,2,1))
    // 但是这样的话要把 msort 的 声明改成
    // def msort[T](less: (T,T) => Boolean, xs: List[T]): List[T] = {...}
    val result = msort(compareFunc)(List(9,8,7,6,5,4,3,2,1))
    println(result)
  }
}

摘自《Programming in Scala》

转载于:https://www.cnblogs.com/ilovexiao77/p/4855297.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值