С RosettaCode's Standard ML solution является очень медленной версией Quicksort в соответствии с вопросом (и обсуждением) «Why is the minimalist, example Haskell quicksort not a "true" quicksort?», как бы функциональный Quicksort выглядел в стандартном ML, если он вел себя в соответствии со сложностью Hoare's algoritm?True QuickSort в стандарте ML
fun quicksort [] = []
| quicksort (x::xs) =
let
val (left, right) = List.partition (fn y => y<x) xs
in
quicksort left @ [x] @ quicksort right
end
То есть, который использует некоторые аспекты функционального программирования там, где это имеет смысл. В отличие от версии Haskell, для которой нуждается в, чтобы инкапсулировать ее местное разбиение на разделы, возникла бы необходимость в QuickSort в SML, чтобы каким-либо образом отличаться от версии C помимо синтаксиса? Независимо от того, принимает ли функция массив/вектор или проводит O (n) преобразование времени менее актуально.
Редактировать: Перефразированный вопрос относительно комментариев Джона Колмана.
С нечистыми частями SML с использованием 'ref', изменяемых массивов, петель и т. Д., Конечно, несколько легко написать настоящую быструю сортировку. Интересный вопрос заключается в том, что вы можете написать quicksort в SML, который является эффективным и (главным образом) функциональным. –