Académique Documents
Professionnel Documents
Culture Documents
2002
c – Florence HENRY – Université de Versailles
florence.henry@obspm.fr
8 54 7 23 1 14
↑
m
2. Une fois cet emplacement trouvé, on échange les éléments tab[m] et tab[0]. Maintenant, tab[0] contient
le plus petit élément le plus petit du tableau, et on n’y touche plus (chiffre entouré dans l’exemple).
1
, 54 7 23 8 14
3. Recommencer les opérations 1 et 2 sur les éléments [1, N − 1] du tableau. Ainsi, on recherche le plus petit
élément parmi (tab[1], · · · ,tab[N − 1]) et on l’échange avec tab[1]. tab[1] contient alors le 2ème plus petit
élément du tableau.
1
, 54 7 23 8 14
↑
m
1
, 7
, 54 23 8 14
4. Et ainsi de suite jusqu’à la fin du tableau .
1
, 7
, 8
, 14
, 23
, 54
,
Il est facile de compter le nombre d’opérations nécessaires. À chaque itération i, on démarre à l’élément
tab[i] et on le compare successivement à tab[i + 1], tab[i + 2], ..., tab[n]. On fait donc N − i comparaisons.
On commence à i = 1 et on finit à i = N − 1. On fait donc (N + 1) + (N − 2) + · · · + 2 + 1 = N(N−1) 2
comparaisons, et N − 1 échanges. Le tri par sélection fait donc de l’ordre de N 2 comparaisons.
On écrira que le tri par sélection est en O (N 2 ). Le temps nécessaire pour trier est quadratique par rapport
aux nombres d’éléments du tableau.
8 54 7 23 1 14 tableau initial
8 54 7 23 1 14 8 < 54 ⇒ on ne change rien
8 7 54 23 1 14 54 > 7 ⇒ on permute 54 et 7
8 7 23 54 1 14 54 > 23 ⇒ on permute 54 et 23
8 7 23 1 54 14 1 < 54 ⇒ on permute 54 et 1
8 7 23 1 14 54
, 14 < 54 ⇒ on permute 54 et 14
1
2. On recommence avec la suite (tab[0],tab[2], · · · ,tab[N − 3]) et le 2ème plus grand élément se retrouve
en tab[N − 2]
8 7 23 1 14 54
, tableau à la fin de l’étape 1.
8 7 1 14 23
, 54
, tableau à la fin de l’étape 2.
3. Et ainsi de suite jusqu’à ce que la suite à parcourir soit (tab[0]).Le tableau est alors trié.
1
, 7
, 8
, 14
, 23
, 54
, tableau final
On peut aussi compter le nombre d’opérations à réaliser. Il s’agit également d’un tri en O (N 2 ) comparaisons.
3. De manière générale on suppose les i − 1 premières cartes triées. On prend la ième carte, et on essaie de
la mettre à sa place dans les cartes déjà triées.
i
↓
7 8 54 23 1 14 8 < 23 < 54 ⇒ on nsère 23 entre 8 et 54
7 8 23 54 1 14
4. Et on continue jusqu’à i = N.
i
↓
7 8 23 54 1 14 1 < 7 ⇒ on insère 1 devant 7
1 7 8 23 54 14
i
↓
1 7 8 23 54 14 8 < 14 < 23 ⇒ on insère 14 entre 8 et 23
1 7 8 14 23 54
Le nombre de comparaisons ici est aussi en O (N 2 ). Mais à la différence des autres tris, le nombre d’échanges
à faire décroit fortement si le tableau initial est presque en ordre.
2 Travail demandé
Votre programme devra permettre de trier un tableau de réels par les 3 méthodes. Pendant l’exécution du
programme, l’utilisateur choisira la taille du tableau et la méthode de tri.
L’usage des fonctions sera essentiel : pour chaque méthode, pour l’inversion de 2 élements, pour l’insertion
d’un élément dans un tableau ...
Le remplissage du tableau se fera comme vous le voulez : par l’utilisateur, par lecture dans un fichier, ou
aléatoirement.
L’aspect convivial du programme (choix mutliples et répétitifs proposés à l’utilisateur) ainsi que l’aspect
modulaire (utilisation des fonctions au maximum) seront appréciés pour l’évaluation.
Vous ferez enfin un compte-rendu qui contiendra le listing de votre programme, et les réflexions (informa-
tiques, mathématiques, ...) que vous a inspiré le projet ainsi que les difficultés que vous avez rencontré.
2
3 Pour aller plus loin
Vous pourrez, en plus, créer un tableau de très grande dimension (N=50, 100, 500, 1000, 10000, ...), le
remplir de manière aléatoire (grâce à la fonction random) et comparer ainsi les différentes méthodes de tri en
les chronométrant.
On chronomètre la durée d’un programme projet en l’exécutant avec la commande
time ./projet
au lieu du
./projet
habituel.
main (){
long a;
int i;
srandom (1);