我如何在scala中编写一个名为Order的函数,该函数需要一个参数:Int列表。并返回相同的Ints列表,从最小到最大

时间:2017-02-24 16:18:23

标签: scala

我有一个基本案例和一个递归调用,但我不知道从那里去哪里。我也需要使用模式匹配

def order(ls:List[Int]):List[Int] = ls match {
   case Nil => Nil
   case h::t => order(t) 

2 个答案:

答案 0 :(得分:1)

我很确定您正在寻找递归排序算法。 例如,您可以查看合并排序。这是一个简化的非通用版本

def mergeSort(ls: List[Int]): List[Int] = {
  def merge(l: List[Int], r: List[Int]): List[Int] = (l, r) match {
    case (Nil, _) => r
    case (_, Nil) => l
    case (lHead :: lTail, rHead :: rTail) =>
      if (lHead < rHead) {
        lHead :: merge(lTail, r)
      } else {
        rHead :: merge(l, rTail)
      }
  }

  val n = ls.length / 2
  if (n == 0)
    ls
  else {
    val (a, b) = ls splitAt n
    merge(mergeSort(a), mergeSort(b))
  }
}

答案 1 :(得分:0)

试试这个

def order(ls:List[Int]):List[Int] = ls match {
case Nil => Nil
case h => h.sorted
}

 OR

def order(ls:List[Int]):List[Int] = ls match {
case Nil => Nil
case h => h.sortWith(_ < _)
}