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

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...