12  Median

for odd number of elements

(def numbers [1 2 3])
numbers
[1 2 3]
(nth numbers (/ (count numbers) 2))
2

for even number of elements

(def numbers [1 2 3 4])
numbers
[1 2 3 4]
(count numbers)
4
(/ (count numbers) 2)
2
(nth numbers (/ (count numbers) 2))
3
(dec (/ (count numbers) 2))
1
(nth numbers (dec (/ (count numbers) 2)))
2

median

(defn median [numbers]
  (let [n (count numbers)
        sorted-numbers (sort numbers)]
    (if (odd? n)
      (nth sorted-numbers (/ n 2))
      (let [mid1 (nth sorted-numbers (/ n 2))
            mid2 (nth sorted-numbers (dec (/ n 2)))]
        (float (/ (+ mid1 mid2) 2))))))
(median [1 2 3])
2
(median [1 2 3 4])
2.5
(median [2 1 3])
2
(median [2 1 4 3])
2.5
source: notebooks/median.clj