Sorting algorithms/Heapsort: Difference between revisions

(D was not in it's correct alphabetical order)
Line 375:
 
=={{header|Clojure}}==
{{trans|OCaml}}
<lang lisp>
(defn- swap [a i j]
(assoc a i (nth a j) j (nth a i)))
 
(defn- sift [a pred k l]
(loop [a a x k y (inc (* 2 k))]
Line 391 ⟶ 390:
a)))
 
(defn- heapsortheapify[pred a len]
(reduce (fn [c term] (sift (swap c term 0) pred 0 term))
(reduce (fn [c i] (sift c pred i len))
(vec a)
(range (dec (int (/ len 2))) -1 -1))
(range (dec len) 0 -1))))
 
 
(defn heap-sort
([a pred]
(let [len (count a)]
(heapify pred a len)))
(reduce (fn [c term] (sift (swap c term 0) pred 0 term))
(reduce (fn [c i] (sift c pred i len))
(vec a)
(range (dec (int (/ len 2))) -1 -1))
(range (dec len) 0 -1))))
([a]
(heapsortheap-sort a <)))
</lang>
Example usage:
Line 411 ⟶ 414:
[1 2 2 3 4 6 6]
</lang>
 
 
=={{header|Common Lisp}}==
Anonymous user