在本书http://www.scala-lang.org/docu/files/ScalaByExample.pdf的第 2 章中,M. Odersky 编写了以下快速排序的实现
def sort(xs: Array[Int]): Array[Int] = {
if (xs.length <= 1) xs
else {
val pivot = xs(xs.length / 2)
Array.concat(
sort(xs filter (pivot >)),
xs filter (pivot ==),
sort(xs filter (pivot <)))
}
}
并说“命令式和函数式实现都具有相同的渐近复杂度——在平均情况下为 O(N log (N))” 但看起来不是,因为我们两次应用过滤谓词来分区数组。在经典的命令式版本中,我们对数组使用一个循环。那么功能实现的运行时间是 O(N log (N)) 吗?