Tri à bulles en Lisp

Code


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

Explications

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.