;; Ces programmes sont sous licence CeCILL-B V1. ;; Exécution en ligne de commande avec Bigloo : ;; $ bigloo -i TriSelection.scm ;; initialisation d'un tableau avec des nombres aléatoires (define (RandomInitialise V) (let ((nbItems (vector-length V))) (do ((item 0 (+ item 1))) ((= item nbItems)) (vector-set! V item (random 1000))))) ;; affichage d'un tableau (define (AfficheTableau V) (let ((nbItems (vector-length V))) (do ((item 0 (+ item 1))) ((= item nbItems)) (display (vector-ref V item)) (display " ")) (newline))) ;; donner l'indice du plus petit élément de V : (define (MinR V i) (let ((imin i) (nbItems (vector-length V))) (do ((j (+ i 1) (+ j 1))) ((>= j nbItems) imin) (if (> (vector-ref V imin) (vector-ref V j)) (set! imin j))))) ;; permuter deux éléments de V : (define (permute V i j) (let ((temp (vector-ref V i))) (vector-set! V i (vector-ref V j)) (vector-set! V j temp))) (define (TriSelection) (let* ((nbItems 16) (V (make-vector nbItems 0))) (RandomInitialise V) (AfficheTableau V) (do ((i 0 (+ i 1))) ((= i nbItems) V) (let ((posmini (MinR V i))) (permute V i posmini))) (AfficheTableau V) (newline))) (TriSelection)