Tri par sélection en Lisp
Trier les éléments d'un tableau
(defun selection-sort (vector less)
(loop with length = (length vector)
for k from 0 below (1- length)
do (loop with min-index = k
for i from (1+ k) below length
do (when (funcall less (aref vector i) (aref vector min-index))
(setf min-index i))
finally (rotatef (aref vector k) (aref vector min-index)))))
Trier de manière destructive les éléments d'une liste
(defun selection-sort-list (list less)
(loop for k on list
do (loop with min-cell = k
for i on (cdr k)
do (when (funcall less (car i) (car min-cell))
(setf min-cell i))
finally (rotatef (car k) (car min-cell)))
until (null (cdr k))))