Недавно я ответил на question с попыткой написать функцию quicksort в Scala, я видел что-то вроде кода, написанного где-то.
def qsort(l: List[Int]): List[Int] = {
l match {
case Nil => Nil
case pivot::tail => qsort(tail.filter(_ < pivot)) ::: pivot :: qsort(tail.filter(_ >= pivot))
}
}
Мой ответ получил некоторую конструктивную критику, указывающую на то, что List был плохим выбором коллекции для быстрой сортировки, а во-вторых, что вышеупомянутое не было хвостом рекурсивным.
Я попытался переписать выше в хвостовой рекурсивной манере, но не имел большой удачи. Можно ли написать хвостовую рекурсивную quicksort? или, если нет, как это можно сделать в функциональном стиле? Также, что можно сделать для максимизации эффективности реализации?