2
我試圖在clojure中實現選擇排序O(n2)。是的,基礎排序使用非常高效的java數組排序。不過這是一個學習練習。clojure的慣用選擇排序
以下作品的代碼,但是我在想,如果有重寫它的更地道的方式,如下面似乎笨重 -
(defn mins [coll]
(reduce (fn[[min-coll rest-coll] val]
(case (compare val (first min-coll))
-1 [[val] (apply conj rest-coll min-coll)]
0 [(conj min-coll val) rest-coll]
1 [min-coll (conj rest-coll val)]))
[[(first coll)] []]
(rest coll)))
;; (mins [3 1 1 2]) => [[1 1] [3 2]]
(defn selection-sort [coll]
(loop [[sorted coll] [[] coll]]
(let [[s c] (mins coll)]
(if-not (seq coll)
sorted
(recur [(concat sorted s) c])))))
(selection-sort [3 1 1 2 5 7 8 8 4 6])
Alex我試着運行它,它出錯了。你有沒有工作? – murtaza52
你是在參數向量還是seq上調用它?如果你想讓它與seqs工作不幸,因爲subvec調用輸入需要轉換成第一個 –
交換,而不是subvec抱歉* –