(defun bubble-sort (vector less)
(loop with length = (length vector)
for max from (- length 2) downto 0
do (loop for i from 0 to max
do (when (funcall less
(aref vector (1+ i))
(aref vector i))
(rotatef (aref vector i)
(aref vector (1+ i)))))))
La fonction less passée en argument renvoie vrai si et seulement si son premier argument est strictement inférieur à son deuxième argument.
La variable max indique l'index maximum du premier élément d'un couple qui doit être considérer pour un échange.
La macro rotatef échange la valeur entre deux places.