微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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任务的输出文件合并, 也是只需一次归并即可完成.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐