(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.