A- Le tri d’un tableau :
0- Définition :
Un algorithme de tri est une suite d’instructions servant à ……….
……… de façon ……… ou ……….
Exemples :
Séquence triée : 12 – 15 – 88 – 121 – 122 – 714 – 901 – 2510
Séquence non triée : 15.5 – 19 – 10.7 - 201 - 3 – 155.4
NB : dans la suite du chapitre on choisit de trier les séquences par ordre croissant.
1- Tri à bulles : Exemple :
Principe :
Cette méthode consiste à faire remonter le plus grand élément du tableau en comparant les éléments successifs.
1- On compare le premier pair d’éléments.
2- Si T[1] > T[2] alors on permute T[1] et T[2], aller au pair suivant et répéter les étapes 1 et 2 jusqu’à comparer le dernier pair T[N] et T[N-1]. A la fin de ce premier parcours on aura passé le plus grand élément du tableau vers sa place finale qui est le Nième élément du tableau.
3- On recommence cette opération en parcourant de 1 à N-1 puis de 1 à N-2 et ainsi de suite.
4- On arrête le traitement si on arrive au dernier élément du tableau ou le tableau devient trié.
LES ALGORITHMES DE TRI
Disponible sur www.elbahi.jimdo.com
Algorithme de tri à bulles :
0)
DEF PROC Tri_bulles (N : entier ; Var T :TAB)1) Répéter
Jusqu’a ( ) ou ( ) 2)
Fin Tri_bulles2- Tri par sélection : Exemple :
Principe :
Cette méthode consiste à :
1- Trouver l’indice « position » (posmin) du plus petit élément du tableau.
2- Placer le plus petit élément (T[posmin]) à sa position finale (la première position) 3- Rechercher l’indice du second plus petit élément
i=1 posmin=7 permuter T[1] et T[7]
i=2 posmin=6 permuter T[2] et T[6]
i=3 posmin=6 permuter T[3] et T[6]
i=4 posmin=6 permuter T[4] et T[6]
i=5 posmin=7 permuter T[5] et T[7]
i=6 posmin=7 permuter T[6] et T[7]
Tableau Trié
Algorithme de tri par sélection :
0)
DEF PROC Tri_select (N : entier ; Var T :TAB)1)
.Pour i de 1 à N-1 faire
...
si (... ) alors ...
...
...
...
Fin si Fin Pour 2)
Fin Tri_select0)
DEF FN PMin (T : TAB ; N, i : entier) : ...1)
pm iPour j de i+1 à N faire Si T[j] < T[pm] alors pm j Finsi
Fin pour
2)
PMin pm3)
Fin PMinRôle de la fonction PMin :
...
...
...
...
3- Tri par insertion : Exemple :
Principe :
1- On commence par le deuxième élément du tableau.
2- On compare l’élément choisi (v) avec tous ses précédents dans la liste (la partie gauche du tableau) afin de l’insérer dans la bonne position après avoir décalé les éléments qui sont supérieurs à (v) vers la droite.
3- Répéter l’étape 2 pour l’élément suivant jusqu’à arriver au dernier élément du tableau.
Algorithme de tri par insertion :
0)
DEF PROC Tri_insert (N : entier ; VAR T : TAB)1)
Pour i de 2 à N fairev T[i]
j i
PROC decaler_d(T,j,v) T[j] v
Fin pour
2)
Fin Tri_insert0)
DEF PROC decaler_d (Var T :TAB ; Var j : entier ; v :entier)1)
Tant que (T [j-1] > v) et (j>1) FaireT[j] T[j-1]
j j-1 Fin Tant que
2)
Fin decaler_dAprès avoir décalé les éléments qui sont supérieurs à v je l’insère dans sa bonne position.
C’est le même principe du classement d’un
dossier dans un ensemble de dossiers triés par ordre alphabétique
ou numérique
B- Recherche d’un élément dans un tableau :
1- Introduction :
La recherche d’un élément dans un tableau est une pratique très courante en programmation. Nous allons voir deux méthodes de recherche :
………
………
2- Recherche séquentielle : Principe :
La recherche séquentielle d’un élément dans un tableau consiste à ……… d’un élément dans le tableau, par le fait de parcourir le tableau élément par élément jusqu’à ……… ce dernier ou ………...………
Algorithme de recherche séquentielle:
0) DEF FN RECHSEQ (T :TAB ; N :entier ; V :entier) : booléen 1) i
0
Répéter i
i+1
Jusqu'à (………. ) ou (………. ) 2) si ( T[i]
=V ) alors
OK
vrai
sinon OK
faux fin si
3) RECHSEQ
OK 4) Fin RECHSEQ
Activité 1:Donner l’algorithme d’une fonction nommée existe qui vérifie si un caractère existe ou non dans une chaine de caractères.
3- Recherche dichotomique : Principe :
La dichotomie (couper en deux) est un processus de recherche où à chaque étape l’espace de recherche se réduit à l’une des parties.
Pour exécuter ce processus il faut que les éléments de l’espace de recherche soient ordonnés et finis.
Algorithme de recherche dichotomique:
0)
DEF FN RECHERCHE (T :TAB ; N,M :entier) : booléen1)
inf 1sup N OK Faux
Répéter
i (inf+sup ) div 2 Si (T[i] = M) alors OK Vrai
sinon si (M>T[i]) alors inf i +1 sinon sup i -1 finsi
Jusqu’à ((inf > sup) ou (OK = vrai))
2)
RECHERCHE OK3)
Fin RECHERCHEActivité 2:
On vous demande de faire le programme pascal qui remplit un tableau T par N entiers positifs de façon croissante avec 6<N<20.
Le programme doit par la suite saisir un entier quelconque et de vérifier s’il existe ou non dans le tableau en appliquant la recherche dichotomique.
C - Tri Shell
Présentation :
Le tri par shell est une amélioration de tri par insertion proposée par Donald L.Shell en 1959.
Le tri par shell se base sur le calcul de pas.
Question : Mais qu’est-ce que le pas et comment le calculer ?
Réponse : Donald Shell a proposé la formule (la suite) suivante pour calculer le pas :
(avec N est la taille du tableau)
U
0= 1
U
n+1= 3*U
n+ 1
Exemple :
Calculer le pas pour un tableau de 100 éléments :
Pour calculer le pas d’un tableau de taille N
=100 on procède comme suit : Etape1
=déterminer la valeur maximale de pas
Etape 2
=Les valeurs du pas pour trier le tableau sont :
Activité 3 :
Calculer les pas pour un tableau de 350 éléments : Remarque :
Le tri par insertion est un cas
particulier du tir shell (p
=1)
Les valeurs du pas pour trier le tableau :
Algorithme de tri shell :
0) DEF PROC tri_shell (N :entier ; var T :tab) 1) P
0
Tant que (p<N) faire P (3*p+1)
Fin tant que
2) Tant que (p
≠0) faire P
p div 3
Pour i de p+1 à N faire v
T[i]
j
i
Tant que (j>p) et (T[j-p]>v) faire T[j]
T[j-p]
j
j-p Fin tant que T[j]
v
Fin pour Fin tant que 3) Fin tri_shell
Activité 4 :
Donner le programme pascal qui permet de :
-
Remplir un tableau T se façon aléatoire par N entiers (avec 4
≤N
≤15 et 10
≤T[i]
≤99) Trier le tableau par ordre croissant en utilisant le tri par shell.
………
…
III. Tri par fusion
Principe : ce tri se base sur le paradigme : « diviser pour régner » Le principe est le suivant :
-
Le tableau à tri sera devisé en deux sous tableaux.
-
Nous trions chacun d’entre eux.
-
Nous fusionnons les deux tableaux obtenus en respectant l’ordre du tri.
Activité 5 :
On se propose de faire le programme qui permet de :
-
Remplir un tableau T1 par N entiers de façon croissante (avec 2
≤N
≤10)
-Remplir un tableau T2 par M entiers de façon croissante (avec 3
≤M
≤15)
-
En utilisant le tri par fusion, fusionner le contenu de deux tableaux T1 et T2 dans un tableau T de telle façon que le tableau T soit trié par ordre croissant.
-
Afficher le contenu des 3 tableaux.
Question : Quelle est la taille du tableau T ?
Réponse : ………..
Travail demandé :