我觉得 insertSortRight 比 insertSortLeft 效率低,因为 insertSortRight 需要调用 List.last(即 O(n))作为 insert() 的参数之一,其中 insertSortLeft 调用 List.head(即 O(1))作为一个参数insert() 的参数。
这种理解正确吗?谢谢。
def insertSortRight(unsorted: List[Int]) : List[Int] = {
(unsorted :\ List[Int]()) ((a, b) => insert(a, b))
}
def insertSortLeft(unsorted: List[Int]) : List[Int] = {
(List[Int]() /: unsorted) ((a, b) => insert(b, a))
}
def insert(a: Int, list: List[Int]) : List[Int] = list match {
case List() => List(a)
case y::ys => if (a > y) y::insert(a, ys) else a::y::ys
}
DHG 回答“总是喜欢左折叠”。但是,Scala 中的编程有一个相反的例子。
def flattenLeft[T](xss: List[List[T]]) = (List[T]() /: xss) (_ ::: )
def flattenRight[T](xss: List[List[T]]) = (xss :~List[T]()) ( ::: _)
我想这是因为在这种情况下 flattenRight 是通过一个函数调用实现的,而 flattenLeft 是通过 n 个函数调用实现的?