Vous êtes sur la page 1sur 4

Master 2, mathématiques et applications UPMC

Résolution des EDP par la méthode des éléments finis 2011–2012

Premiers algorithmes
———————–
http://www.ljll.math.upmc.fr/~seguin/enseignement.php

Avertissement
Pour chaque procédure, préciser en commentaire avant de la programmer :
– la liste de ses arguments ainsi que leur utilisation (donnée, donnée à modifier,
variable à remplir),
– ce qu’elle renvoie,
– sa fonction (en lien avec ses arguments et ce qu’elle renvoie).

1 Algorithmes de base sur les tableaux


Avant de réaliser les exercices suivants, écrire une structure générale du pro-
gramme (fonction principale et fonctions annexes) permettant de tester les
différentes procédures au fur et à mesure de leur programmation.
Exercice 1. Écrire une procédure renvoyant l’élément maximum du tableau.
Exercice 2. Écrire une procédure renvoyant l’élément minimum du tableau en
utilisant celle de l’exercice précédent.
Exercice 3. Écrire deux procédures échangeant deux éléments du tableau, l’une
à base de pointeurs, l’autre à base de passage d’arguments par référence.

2 Algorithmes de tri
On s’intéresse ici au problème de tri d’une suite de N entiers, c’est-à-dire
ranger dans l’ordre croissant une suite finie d’entiers initialement placés dans
le désordre. Prenons par exemple la suite suivante de 10 entiers naturels

11 54 23 6 7 89 4 2 8 45 ,

on veut donc obtenir au final :

2 4 6 7 8 11 23 45 54 89 .

1
Pour réaliser cela, il existe de nombreux algorithmes de tri, dont certains décrits
plus loin. Avant d’essayer de programmer ces algorithmes, il est impératif de
les tester sur papier à l’aide de plusieurs exemples, pour être certain de les
comprendre.
Exercice 4. Parmi les algorithmes de tri qui suivent, implémenter le tri par
insertion.

Le tri à bulles
Cet algorithme peut être traduit de la façon suivante. On commence par le
premier terme. S’il est supérieur au terme suivant, on les échange.

11 54 23 6 7 89 4 2 8 45

Ensuite, on regarde le deuxième terme, qui est comparé avec le troisième


terme. Si le deuxième terme est supérieur au troisième, on les échange.

11 23 54 6 7 89 4 2 8 45

On continue en passant au troisième terme... jusqu’à ce que l’on soit arrivé à


la fin de la suite.

11 23 6 7 54 4 2 8 45 89

On vérifie aisément qu’à ce stade, le dernier élément (l’élément 10) est l’élé-
ment ayant la plus grande valeur de la suite, donc il est bien placé.
On renouvelle alors l’opération maintenant sur la suite allant de l’élément 1 à
l’élément 9. À la fin de cette opération, on aura l’élément 9 qui sera inférieur
à l’élément 10 et supérieur à tous les autres.

11 6 7 23 4 2 8 45 54 89

On continue jusqu’à ce que la taille de la sous-suite soit à un et on obtient

2 4 6 7 8 11 23 45 54 89 .

Le tri par sélection


On a vu précédemment qu’une des conséquences du tri à bulles était qu’après
le premier parcours du tableau la valeur maximale était située en fin de tableau.
Le tri par sélection repose sur la détection de l’élément maximal du tableau,
que l’on échange avec le dernier élément du tableau.

11 54 23 6 7 45 4 2 8 89

2
À l’étape suivante, on recherche l’élément de plus grande valeur parmi les N −1
premiers éléments, que l’on échange ensuite avec l’élément N − 1.
11 8 23 6 7 45 4 2 54 89
L’arrêt de cet algorithme est identique à celui du tri à bulles.

Le tri par insertion


Supposons que les k premiers termes de la suite soient ordonnés par ordre
croissant (ici k = 4).
6 11 23 54 7 89 4 2 8 45
L’objectif est d’insérer l’élément k + 1 à la bonne place dans la sous-suite
composée des k premiers termes. Pour cela, on échange les éléments k et
k + 1, puis k − 1 et k... jusqu’à ce que la sous-suite composée des k + 1
premiers termes soit ordonnée.
6 7 11 23 54 89 4 2 8 45
On passe ensuite à l’étape suivante suivante, c’est-à-dire insérer l’élément k +2
dans la sous-suite composées des k + 1 premiers termes. L’algorithme débute
par l’insertion du deuxième élément dans la sous-suite composée du premier
terme.

Tri rapide
L’algorithme de tri rapide est basé sur la notion de pivot et de programmation
récursive. On se donne un pivot, dans notre cas ce sera le premier élément
(ici 11). Ensuite, on place les éléments plus petits que le pivot juste après le
pivot et les éléments plus grands que le pivot en fin du tableau, ce qui donne
ici :
11 6 7 4 2 8 54 23 89 45 .
On obtient deux sous-tableaux :
6 7 4 2 8 et 54 23 89 45 ,
qui correspondent aux éléments plus petits et plus grands que le pivot. On
place le pivot entre ces deux sous-tableaux :
8 6 7 4 2 11 54 23 89 45 ,
puis on relance le tri rapide sur chaque sous-tableau. La condition d’arrêt
de la récursion porte sur la taille des sous-tableaux qui doit être strictement
supérieure à 1.

3
Tri fusion
L’algorithme de tri rapide est basé sur la notion de programmation récursive
et de fusion de tableaux déjà triés. On découpe le tableau en deux parties
à peu près égales. On trie par le tri fusion les données de chaque partie. On
fusionne les deux parties, c’est-à-dire qu’on reconstitue le tableau directement
trié. L’arrêt de la récursivité s’effectue dès lors qu’une les parties ne contiennent
qu’un seul élément.
On obtient initialement deux sous-tableaux :

11 6 7 4 2 et 8 54 23 89 45 .

On continue à découper en deux...

11 6 7 4 2 8 54 23 89 45
11 6 7 4 2 8 54 3 89 45
11 6 7 4 2 8 54 23 89 45

puis on fusionne en triant :

6 11 7 4 2 54 8 3 89 45
6 7 11 2 4 8 23 54 45 89
2 4 6 7 11 8 23 45 54 89 .