scala实现归并排序

object MergeSort {

  def merge(l1: List[Int], l2: List[Int]):List[Int] =(l1, l2) match {
    case (Nil, _) => l2
    case (_, Nil) => l1
    case (h1::t1, h2::t2) =>
      if(h1<h2) h1::merge(t1, l2)
      else h2::merge(l1, t2)
  }


  def mergesort(list: List[Int]):List[Int]=list match {
    case Nil => list
    case h::Nil => list
    case _=>
      val (l1, l2)=list.splitAt(list.length/2)
      merge(mergesort(l1), mergesort(l2))
  }

  def main(args: Array[String]): Unit = {
    val num=List(1, 4, 8 , 2, 10)
    println(mergesort(num))
  }
}

运行结果
运行结果
MapReduce中有两次归并排序算法的使用.
第一次发生在Map任务完成之前, 磁盘上存放着多个完成分区, 完成排序的文件, 这时需要将这些文件进行一次整合, 合并成一个已经分好区并排好序的文件, 由于在溢写阶段已经进行过一次快排, 所以一次归并就能完成排序.
第二次归并发生在shuffle阶段, 需要将多个Map任务的输出文件合并, 也是只需一次归并即可完成.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值