如何在scala中编写一个名为Order的函数,它接受一个参数:整数列表。并从最小值到最大值返回相同的整数列表
我有一个基本情况和一个递归调用,但我不知道从那里去哪里。我还需要使用模式匹配如何在scala中编写一个名为Order的函数,它接受一个参数:整数列表。并从最小值到最大值返回相同的整数列表,scala,Scala,我有一个基本情况和一个递归调用,但我不知道从那里去哪里。我还需要使用模式匹配 def order(ls:List[Int]):List[Int] = ls match { case Nil => Nil case h::t => order(t) 试试这个 def order(ls:List[Int]):List[Int] = ls match { case Nil => Nil case h => h.sorted } OR def order(l
def order(ls:List[Int]):List[Int] = ls match {
case Nil => Nil
case h::t => order(t)
试试这个
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(_ < _)
}
def顺序(ls:List[Int]):List[Int]=ls匹配{
案例Nil=>Nil
案例h=>h
}
或
定义顺序(ls:List[Int]):List[Int]=ls匹配{
案例Nil=>Nil
案例h=>h.sortWith(
我很确定您正在寻找递归排序算法。
例如,您可以查看合并排序。这是一个简化的非通用版本
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))
}
}
def mergeSort(ls:List[Int]):List[Int]={
def merge(l:List[Int],r:List[Int]):List[Int]=(l,r)匹配{
案例(无,41;)=>r
案例(无)=>l
案例(lHead::lTail,rHead::rTail)=>
如果(左前<右后){
lHead::merge(lTail,r)
}否则{
rHead::合并(l,rTail)
}
}
val n=最小长度/2
如果(n==0)
ls
否则{
val(a,b)=n处的ls拆分
合并(合并排序(a),合并排序(b))
}
}
我假设他们希望您实现类似快速排序的解决方案,但没有适当的排序(分区)。但是在这里给你答案会有点违背练习的目的。我能得到一些帮助吗。我已经想到了所有不在列表中使用枢轴(头部)进行分区的东西,将排序后的左侧与排序的右侧与中间的枢轴合并。