qsortできた
user=> (defn qsort [array] (let [value (first array) smaller (for [v array :when (<= v value)] v) larger (for [v array :when (> v value)] v)] (when-not (empty? array) (into (conj (qsort larger) value ) (reverse (qsort (rest smaller)))) ) ) ) #'user/qsort user=> (qsort []) nil user=> (qsort [5 4 3 2 1 9 8 7 6 10]) (1 2 3 4 5 6 7 8 9 10)
と思ったけど、concatってのがある。
intoとかだと、追加する側のリストが分解されて、先頭から
追加される側のリストに追加されるので、追加する側が
自然と逆順になるので、reverseせんと。。。
user=> (defn qsort [array] (let [value (first array) smaller (for [v array :when (<= v value)] v) larger (for [v array :when (> v value)] v)] (when-not (empty? array) ; (into (conj (qsort larger) value ) (reverse (qsort (rest smaller)))) (concat (qsort (rest smaller)) (conj (qsort larger) value ) ) ) ) )