【发布时间】:2019-09-12 20:39:51
【问题描述】:
我正在学习一门关于 scala 的课程,其中我正在执行合并排序操作。这是为此编写的代码
def merge(leftList:List[Int], rightList:List[Int]): List[Int] = {
val output = (0 until leftList.length + rightList.length).foldLeft(List[Int](), leftList, rightList) { (triple, _) =>
val (mergedList, leftRemaining, rightRemaining) = triple
(leftRemaining, rightRemaining) match {
case (Nil, r :: rTail) => (r :: mergedList, Nil, rTail)
case (l :: lTail, Nil) => (l :: mergedList, lTail, Nil)
case (l :: lTail, r :: rTail) if l > r => (l :: mergedList, lTail, rightRemaining)
case (l :: lTail, r :: rTail) => (r :: mergedList, leftRemaining, rTail)
}
}
output._1.reverse
}
def mergeSort(inputList: IndexedSeq[Int]): List[Int] = {
if(inputList.length == 1) List(inputList.head)
else {
val (leftList, rightList) = inputList.splitAt(inputList.length / 2)
val sortedLeft = mergeSort(leftList)
val sortedRight = mergeSort(rightList)
merge(sortedLeft, sortedRight)
}
}
mergeSort(Vector(3,4,1,2,33))
但是,列表不是按升序排序,而是始终按降序排序。我尝试调试代码,但没有得出任何结论。任何帮助将不胜感激。 我目前的输出如下
res0: List[Int] = List(33, 4, 3, 2, 1)
预期输出是
List(1, 2, 3, 4, 33)
【问题讨论】:
-
将 .reverse 改为 sorted
标签: list algorithm scala math functional-programming