本の第2章http://www.scala-lang.org/docu/files/ScalaByExample.pdfで、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))」と言いましたが、配列を分割するためにフィルター述語を2回適用するため、そうではないようです。従来の命令バージョンでは、配列に1つのループを使用しています。では、機能実装の実行時間はO(N log(N))ですか?