Wikipediaに参考コードがありますが。
http://ja.wikipedia.org/wiki/%E5%A5%87%E5%81%B6%E8%BB%A2%E7%BD%AE%E3%82%BD%E3%83%BC%E3%83%88
(defn- oe-swap [v] (loop [src v dest [] swapped? false] (if (< (count src) 2) [(concat dest src) swapped?] (if (> (first src) (second src)) (recur (rest (rest src)) (conj dest (second src) (first src)) true) (recur (rest (rest src)) (conj dest (first src) (second src)) swapped?))))) (defn odd-even-transposition-sort [v] (let [[odd-sorted o-swapped?] (oe-swap v) [even-sorted e-swapped?] (oe-swap (rest odd-sorted)) even-sorted (cons (first odd-sorted) even-sorted)] (if (or o-swapped? e-swapped?) (recur even-sorted) even-sorted)))