Anda di halaman 1dari 7

Algorithmique et tri bulles

Algorithmique
Le mot algorithme vient du nom de lauteur persan Al-Khuwarizmi (n vers 780 - mort vers 850)
qui a crit en langue arabe le plus ancien trait dalgbre abrg de calcul par la compltion et la
simplification 1 dans lequel il dcrivait des procds de calcul suivre tape par tape pour rsoudre
des problmes ramens des quations 2 .
On dfinit parfois les algorithmes de la manire suivante : un algorithme est une suite finie de rgles
appliquer dans un ordre dtermin un nombre fini de donnes pour arriver, en un nombre fini
dtapes, un certain rsultat et cela indpendamment des donnes . Le rsultat doit donc sobtenir
en un temps fini.
Dans ce chapitre, nous allons nous intresser la notion de variable. Une variable est une sorte de
bote dans laquelle on peut stocker une information (texte, nombre, liste de nombres, figure,. . .) ;
une variable est nomme (elle a un nom) par exemple MaVariable, a, Nombre1, . . . sont des noms de
variables. Dans un algorithme, a b signifie que le contenu de la bote b vient se mettre
la place du contenu de la bote a. noter que le contenu initial de b reste aussi dans b il est en
quelque sorte recopi dans a.
Dans une premire partie nous crirons un algorithme permettant de ranger une liste de nombres
dans lordre croissant puis nous nous initierons la programmation avec le logiciel Xcas que vous
pouvez tlcharger gratuitement sur internet (dans un moteur de recherche, Xcas donne le lien
de tlchargement).

Le tri bulles

Cette partie provient largement dune activit propose sur le site internet de lirem de Lille par
Jean-Marc Duquesnoy et Raymond Moch.
Le tri bulles ou tri par propagation est un algorithme de tri qui consiste faire remonter progressivement les plus grands lments dune liste, comme les bulles dair remontent la surface dun liquide.
Lalgorithme parcourt la liste, et compare les couples dlments successifs. Lorsque deux lments
successifs ne sont pas dans lordre croissant, ils sont changs. Aprs chaque parcours complet de la
liste, lalgorithme recommence lopration. Lorsquaucun change na lieu pendant un parcours, cela
signifie que la liste est trie : lalgorithme peut sarrter. (Source : Wikipdia)
1. Apparemment, on peut ranger deux nombres donns a et b laide de lalgorithme suivant :
1
2
3
4
5
6
7
8
9
10
11

Entres :
nombres a et b ;
Sorties :
minimum puis maximum des nombres a et b ;
dbut
si a > b alors
a b;
b a;
fin
Afficher a, b
fin
Algorithme 1 : crire deux nombres a et b dans lordre croissant ?

1. Le mot arabe utilis pour nommer la compltion ou restauration se lit Al-Jabr, ce qui donna naissance notre
mot algbre.
2. Notamment, les quations du segond degr.

T.Rey - 2 mars 2010

Algorithmique et tri bulles


En sortie, on demande dafficher successivement les contenus des cases a et b.
Question - Pourquoi cet algorithme est-il incorrect ? Quel rsultat donne-t-il ? (Prendre par
exemple au dpart a = 5 et b = 3.)
2. Voici un algorithme correct pour ordonner a et b dans lordre croissant :
1
2
3
4
5
6
7
8
9
10

1
2
3
4
5
6

Entres :
nombres a et b ;
Sorties :
minimum puis maximum des nombres a et b ;
dbut
si a > b alors
changer a et b ;
fin
Afficher a, b
fin
Algorithme 2 : crire deux nombres a et b dans lordre croissant
On voit que le problme est dchanger le contenu des deux variables a et b.
Question - Donner une solution utilisant une variable auxiliaire c. La rponse sera donne en
compltant le cadre vide de lalgorithme ci-dessous :
Entres :
nombres a et b ;
Sorties :
minimum puis maximum des nombres a et b ;
dbut
si a > b alors

fin
Afficher a, b

8
9
10

fin
Algorithme 3 : crire deux nombres a et b dans lordre croissant

T.Rey - 2 mars 2010

Algorithmique et tri bulles


3. Complment : que fait lalgorithme suivant ? Quel est son avantage par rapport au prcdent ?
1
2
3
4
5
6
7
8
9
10
11
12

Entres :
nombres a et b ;
Sorties :
minimum puis maximum des nombres a et b ;
dbut
si a > b alors
a a+b ;
b ab ;
a ab ;
fin
Afficher a, b
fin
Algorithme 4 : crire deux nombres a et b . . . . . . . . . . . . . . . . . . . . . . . .

4. Quest-ce que le tri bulles ?


Supposons que lon ait ordonner dans lordre croissant la liste
A = (5, 1, 4, 8, 2).
La manipulation de base du tri bulles consiste examiner successivement les couples forms par les nombres de rang 1 et 2, puis par les nombres de rang 2 et 3 et ainsi de suite jusqu
la fin et de leur appliquer le traitement suivant :
On laisse inchang tout couple qui est dj
rang dans lordre croissant ; dans le cas
contraire, on change ses 2 termes.
Voici les transformations successives subies par A au cours de ce processus :
A = (5, 1, 4, 8, 2) (1, 5, 4, 8, 2) (1, 4, 5, 8, 2) (1, 4, 5, 8, 2) B = (1, 4, 5, 2, 8)
La liste B nest pas ordonne dans lordre croissant mais nous avons fait des progrs dans le
classement car le maximum de 5, 1, 4, 8, 2, qui est 8, se trouve maintenant la fin de la liste,
qui est sa place dfinitive.
Cela conduit naturellement appliquer B la manipulation de base. Voici ce que cela donne
B = (1, 4, 5, 2, 8) (1, 4, 5, 2, 8) (1, 4, 5, 2, 8) (1, 4, 2, 5, 8) C = (1, 4, 2, 5, 8)
Cest mieux car les deux derniers termes sont maintenant leurs places dfinitives. Recommenons en appliquant la manipulation de base C :
C = (1, 4, 2, 5, 8) (1, 4, 2, 5, 8) (1, 2, 4, 5, 8) (1, 2, 4, 5, 8) (1, 2, 4, 5, 8)
On voit que le rangement de A dans lordre croissant est termin. Pour cela, on a d appliquer
trois fois la manipulation de base.
Si on imagine maintenant que A est une liste quelconque de n 2 nombres quelconques, il est
clair quaprs une premire application de la manipulation de base, le dernier terme du nouvel
tat de A sera sa place dfinitive ; aprs la seconde application de la manipulation de base, les
deux derniers termes seront leurs places dfinitives, et ainsi de suite. Par consquent, aprs la
(n1)me application de la manipulation de base, les (n1) derniers termes - et par consquent
le premier - seront leurs places dfinitives, ce qui veut dire que le rangement sera termin.
Lexemple A = (5, 1, 4, 8, 2) montre que, quelquefois, il ny a pas besoin deffectuer les (n 1)
applications de la manipulation de base.

T.Rey - 2 mars 2010

Algorithmique et tri bulles


Question : combien faut-il de manipulations de base pour ranger 5, 4, 3, 2, 1 dans lordre
croissant ?
Nous retiendrons que nous sommes srs que A est rang dans
lordre croissant au bout de (n 1) manipulations de base.
5. Voici lalgorithme du tri bulles , en langage naturel :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

Entres :
A = a1 , . . . , an , liste dau moins deux nombres ;
Sorties :
la liste obtenue en rangeant A dans lordre croissant ;
dbut
n longueur de la liste A ;
pour k = 1, . . . , (n 1) faire
pour j = 1, . . . , (n k) faire
si aj > aj+1 alors
c aj ;
aj aj+1 ;
aj+1 c
fin
fin
fin
Afficher A
fin
Algorithme 5 : Algorithme du tri bulles
Questions :
a. peut-on lamliorer de sorte que le traitement aille plus vite ?
b. modifier cet algorithme pour que ltat initial de la liste A soit conserv et affich en mme
temps que le rsultat.

Avec Xcas

2.1

Le logiciel Xcas

Xcas est un logiciel de mathmatiques multi-fonctions : il permet de calculer (avec des nombres
et mme avec des lettres !), de tracer des courbes, de construire des figures, de programmer, et plein
dautres choses. Nous allons, ici, lutiliser pour programmer.
Au lancement, on obtient un cran qui ressemble 3 la figure 2.1 (page 5). En saisissant 2+2, puis
Entre, a confirme ce que je disais prcdemment : il sait calculer !
En saisissant developper((a+b)^2), il dveloppe lidentit remarquable !
Bon, placez-vous maintenant sur une ligne vide, et cliquer sur Prg puis sur Nouveau Programme ;
effacer le : ; sil existe. Vous tes prts programmer.
3. Cela dpend de votre ordinateur, de votre systme dexpoitation et de votre version de Xcas.

T.Rey - 2 mars 2010

Algorithmique et tri bulles

Figure 1 Fentre de dmarrage Xcas

2.2
2.2.1

Premiers programmes
changisme !

Pour crer un programme, il faut lui donner un nom, par exemple Echange et lui indiquer les variables
dont il a besoin (ici deux nombres a et b changer ). Pour cela, on crit : Echange(a,b):={
On crira notre programme aprs laccolade ouvrante { et on le conclura par une accolade fermante
} (quon peut crire tout de suite pour ne pas loublier. . .).
Avec Xcas, laffectation cest--dire le remplissage dune bote par une information (ce quon
indiquait dans les algorithmes par ) se fait avec := . Ainsi pour affecter la variable c le
nombre 5 on crit c:=5; (Chaque instruction du programme doit se terminer par un ;
).
crivons la partie de programme de lalgorithme 1 qui devait changer les contenus des variables a
et b :
Echange(a,b):={// Tout ce qui est plac aprs deux "/" est ignor par Xcas
a:=b;// Il est important de commenter ses programmes.
b:=a;
return a,b;// linstruction return permet de renvoyer un rsultat lutilisateur
}
Une fois le programme crit, il faut le compiler 4 en cliquant sur OK. Si tout se passe bien, un
message Success compiling Echange apparat. Dans une nouvelle ligne, taper Echange(5,3)
et constater que lalgorithme 1 tait bien faux !
Il reste le corriger ( laide des algorithmes 3 ou 4 au choix) pour quil soit correct, le compiler
nouveau, et le tester : au boulot !
Pour enregistrer ce programme, Cliquer sur Prog (juste ct du numro de la ligne o vous avez
crit votre programme), puis sur Sauver comme. Slectionner le dossier Mes documents et saisir le
nom Echange.
Remarque : avec Xcas, linstruction a,b:=b,a change directement les contenus des variables a et
b.
4. La compilation est la traduction du programme crit dans le language de programmation en instructions que
lordinateur peut excuter.

T.Rey - 2 mars 2010

Algorithmique et tri bulles


2.2.2

Tri croissant de deux nombres

Placer le curseur sur une nouvelle ligne blanche vide. Crer un nouveau programme par le menu Prg
puis Nouveau.
Saisir alors TriCroissant(a,b):={ et crire le programme correspondant lalgorithme 4.
Pour la condition Si. . . , cliquer sur ajouter puis sur test et enfin sur si alors sinon. Il reste
complter les blancs .
Si loption en franais nest pas disponible, il faut slectionner If [Then] Else, mettre la condition
dans les parenthses, les instructions si la condition est remplie dans les premires accolades et les
instructions du sinon dans les deuximes accolades.
Par exemple un programme qui testerait si deux nombres sont gaux scrirait :
En franais :

En anglais :

Egalite(a,b):={
si a==b alors//test dgalit : "=="
afficher("ils sont gaux");
sinon
afficher("ils sont diffrents");
fsi;
}// Fin du programme

Egalite(a,b):={
if (a==b) {// dbut du "oui"
afficher("ils sont gaux")}// fin
else {// dbut du "sinon
afficher("ils sont diffrents");
}// fin du sinon
}// fin du programme

2.3

Le tri bulles

Quelques complments de programmation :


Nous allons travailler avec des listes de nombres. La liste A contenant les nombres 5, 4, 3, 2 et 1 se
cre dans une ligne vierge par la commande A:=(5,4,3,2,1). On a alors A[0] qui vaut 5, A[1] qui
vaut 4, . . .. Attention : A[k] donne le k + 1e nombre de la liste (car on commence 0) !
Pour connatre le nombre dlments dune liste A, on a la commande size(A).
Pour ajouter 7 et 6 la fin de la liste A : concat(A,7,6).
Linstruction Pour . . . des algorithmes sobtient en cliquant sur Ajouter, puis sur Loop et enfin
sur pour (ou for). Il reste alors complter les blancs .
Au travail : crire le programme TriABulles qui traduit lalgorithme 5 en langage Xcas. Attention
aux indices (il faudra peut-tre modifier un peu lalgorithme cause des contraintes de programmation) !
Utilisation du programme
1. laide de cet algorithme, ranger A = (5, 1, 4, 8, 2) dans lordre croissant.
2. Mettre 20 entiers au hasard entre 0 et 100 dans la liste A par la commande :
A:=seq(hasard(100),k,1,20) ; cette commande rpte pour k allant de 1 20 linstruction
hasard(100) qui, elle, donne un entier au hasard entre 0 (compris) et 100 (exclu). La commande
hasard(a,b) donne un nombre (dcimal) au hasard de lintervalle [a ; b[.
Les ranger dans lordre croissant grce au programme TriABulles.
3. Recommencer avec 300 entiers au hasard compris entre 0 et 1000. Que peut-on dire du temps
mis par le programme pour raliser le tri ?
Recommencer le tri en utilisant la fonction pr-programme trier de Xcas grce la commande sort(A). Que constate-t-on ? Que peut-on en dduire pour lefficacit du tri bulles ?

T.Rey - 2 mars 2010

Table des matires


1 Le tri bulles

2 Avec Xcas
2.1 Le logiciel Xcas . . . . . . . . . . . .
2.2 Premiers programmes . . . . . . . . .
2.2.1 changisme ! . . . . . . . . . .
2.2.2 Tri croissant de deux nombres
2.3 Le tri bulles . . . . . . . . . . . . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

4
4
5
5
6
6

dans lordre croissant ? . . .


dans lordre croissant . . .
dans lordre croissant . . .
... ... ... ... ... ... ... ...
. . . . . . . . . . . . . . . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

1
2
2
3
4

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

Liste des Algorithmes


1
2
3
4
5

crire deux nombres a et b


crire deux nombres a et b
crire deux nombres a et b
crire deux nombres a et b
Algorithme du tri bulles

T.Rey - 2 mars 2010

Anda mungkin juga menyukai