は、質問(およびディスカッション) "Why is the minimalist, example Haskell quicksort not a "true" quicksort?"によるQuicksortの非常に遅いバージョンなので、機能的Quicksortは、Hoare's algoritmの複雑さに従って動作すれば、どのように標準MLのように見えますか?標準MLのTrue QuickSort
fun quicksort [] = []
| quicksort (x::xs) =
let
val (left, right) = List.partition (fn y => y<x) xs
in
quicksort left @ [x] @ quicksort right
end
つまり、意味があるところで機能プログラミングのいくつかの側面を採用するものです。 には、インプレースパーティショニングをカプセル化するために、にはが必要なHaskellのバージョンとは異なり、SバージョンのQuicksortは構文の他にCバージョンからどのように変化する必要がありますか?関数が配列/ベクトルを受け入れるかどうかを指定します。O(n)リストの変換に時間がかかりません。
編集: John Colemanのコメントに関する言い換えられた質問。ここで
SMLの 'ref'、可変配列、ループなどの不純な部分では、命令型のクイックソートを書くのはやや簡単です。興味深いのは、SMLでクイックソートを書くことができ、それが効率的で(ほとんど)機能的であるかどうかです。 –