Implémentation pour des vecteurs

L'idée de cette implémentation est de considérer les éléments au début du vecteur comme triés et les autres comme une source non triée d'éléments à insérer.

insertionvecteur.lisp

On remarque l'utilisation d'une clause with pour chacune des boucles, éliminant la nécessité de l'entourer d'un let. On remarque aussi la double condition de terminaison de la boucle intérieure, à la fois sur la comparaison des éléments et le fait d'arriver au début du tableau. Finalement, on remarque l'utilisation de la clause finally dans la boucle intérieure.

Comme le montre son utilisation, cette implémentation est stable :

* (defparameter *v* #(4 1 3 1  8 3 44 5 7 3 9 0 0 3 2 44 5 33))

*V*
* (insertionsort1 *v*)

NIL
* *v*

#(0 0 1 1 2 3 3 3 3 4 5 5 7 8 9 33 44 44)
* (insertionsort1 *v* :test #'(lambda (x y) (and (oddp x) (evenp y))))

NIL
* *v*

#(1 1 3 3 3 3 5 5 7 9 33 0 0 2 4 8 44 44)
* (insertionsort1 *v* :test #'>)

NIL
* *v*

#(44 44 33 9 8 7 5 5 4 3 3 3 3 2 1 1 0 0)
* (insertionsort1 *v* :test #'(lambda (x y) (and (oddp x) (evenp y))))

NIL
* *v*

#(33 9 7 5 5 3 3 3 3 1 1 44 44 8 4 2 0 0)
*

Irene DURAND
2011-10-14