我寫了一個遞歸版本:如何實現尾遞歸快速排序在斯卡拉
def quickSort[T](xs: List[T])(p: (T, T) => Boolean): List[T] = xs match{
case Nil => Nil
case _ =>
val x = xs.head
val (left, right) = xs.tail.partition(p(_, x))
val left_sorted = quickSort(left)(p)
val right_sorted = quickSort(right)(p)
left_sorted ::: (x :: right_sorted)
}
但我不知道如何把它變成尾recurisive。任何人都可以給我一個建議嗎?
你不能 - 算法的思想是在較小的任務中打破工作,遞歸執行它們,然後將結果放在一起。因爲後者是nessecarily在快速排序中最後一個thibg,它不能是尾遞歸。 – Ingo 2012-02-12 08:45:16
這個類似的問題,但在OCaml可能會幫助:http://stackoverflow.com/questions/5634083/implementing-a-tail-recursive-version-of-quick-sort-in-f-ocaml – perelman 2012-02-12 08:47:00
對不起,我不不知道OCaml – 2012-02-12 08:47:41