Notre première implémentation de l'algorithme de tri par bulles s'applique à un vecteur. Elle est générique dans le sens où elle est paramétrée par une fonction de comparaison, passée par argument mot-clé. La valeur par défaut est la fonction <. Elle trie le vecteur destructivement par ordre croissant en utilisant la fonction passée en argument pour déterminer si un élément est inférieur à un autre. Si l'utilisateur passe une fonction de type >, le vecteur sera trié par ordre décroissant. A chaque itération, la fonction cherche l'élément le plus grand (d'après la fonction de comparaison). La voici :
bullesvecteur.lisp
On remarque en particulier l'utilisation de loop et de rotatef pour échanger deux éléments du vecteur. Voici comment on peut s'en servir :
Cette implémentation est stable, car deux éléments égaux ne sont jamais échangés.
Irene DURAND