Sorting algorithms/Heapsort: Difference between revisions

Content added Content deleted
(D was not in it's correct alphabetical order)
Line 375: Line 375:


=={{header|Clojure}}==
=={{header|Clojure}}==
{{trans|OCaml}}
<lang lisp>
<lang lisp>
(defn- swap [a i j]
(defn- swap [a i j]
(assoc a i (nth a j) j (nth a i)))
(assoc a i (nth a j) j (nth a i)))

(defn- sift [a pred k l]
(defn- sift [a pred k l]
(loop [a a x k y (inc (* 2 k))]
(loop [a a x k y (inc (* 2 k))]
Line 391: Line 390:
a)))
a)))


(defn heapsort
(defn- 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)))


(defn heap-sort
([a pred]
([a pred]
(let [len (count a)]
(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]
([a]
(heapsort a <)))
(heap-sort a <)))
</lang>
</lang>
Example usage:
Example usage:
Line 411: Line 414:
[1 2 2 3 4 6 6]
[1 2 2 3 4 6 6]
</lang>
</lang>



=={{header|Common Lisp}}==
=={{header|Common Lisp}}==