Sommaire
Les algorithmes avancés
1. Les algorithmes de tri
a. Définition
L’opération de tri permet d’ordonner les éléments d’un tableau en ordre croissant ou en ordre décroissant.
b. Tri par sélection
Soit le tableau T1 suivant, on demande de trier ses éléments en ordre croissant.
880 |
894 |
381 |
586 |
497 |
416 |
1 |
2 |
3 |
4 |
5 |
6 |
Principe
Le tri par sélection consiste à :
- Chercher la valeur minimale à partir de la ième position
- Permuter la valeur minimale trouvée avec la ième valeur du tableau
- Refaire les étapes 2 et 3 pour i de 1 à n-1
Algorithme
DEF PROC Tri_Selection(var t : tab ; n:entier)
Pour i de 1 à (n-1) Faire
indmin ⟵ Fn Minimum(t, i, n)
Si indmin ≠ i Alors
Proc Permuter(t[i], t[indmin])
Fin Si
Fin Pour
Fin Tri_Selection
TDO |
Objet |
Type/Nature |
i, indmin |
entier |
DEF FN Minimum(var t : tab ; d, f :entier):entier
m ⟵ d
Pour i de (d+1) à f Faire
Si t[i] < t[m] Alors
m ⟵ i
Fin Si
Fin Pour
Minimum ⟵ m
Fin Minimum
TDO |
Objet |
Type/Nature |
i, m |
entier |
DEF PROC Permuter(var a, b : entier)
t ⟵ a
a ⟵ b
b ⟵ t
Fin Permuter
TDO |
Objet |
Type/Nature |
t |
entier |
Activité 1
Écrire un programme qui saisit un tableau de N réels (avec 3 ≤ N ≤ 20). Il permet par la suite de mettre les
éléments du tableau en ordre croissant en utilisant la méthode de tri par sélection, puis affiche le tableau.
P.P
Début PP
Proc Saisir(n)
Proc Remplir(t, n)
Proc Tri_Selection(t, n)
Proc Afficher(t, n)
Fin PP
T.D.N.T |
tab = tableau [1..20] de entier |
TDO |
Objet |
Type/Nature |
n |
entier |
t |
tab |
Procédure Saisir
DEF Proc Saisir(var n : entier)
Répéter
Ecrire("Donner n [3, 20] : ")
Lire(n)
Jusqu’à (n dans [3..20])
Fin Saisir
Procédure Remplir
DEF Proc Remplir(var t : tab ; n : entier)
Pour i de 1 à n Faire
Ecrire("Donner t[", i, "] : ")
Lire(t[i])
Fin Pour
Fin Remplir
TDO |
Objet |
Type/Nature |
i |
entier |
Procédure Afficher
DEF Proc Afficher(t : tab ; n : entier)
Pour i de 1 à n Faire
Ecrire(t[i])
Fin Pour
Fin Remplir
TDO |
Objet |
Type/Nature |
i |
entier |
c. Tri à bulles
Principe
- Comparer deux éléments successifs du tableau
- Permuter si les deux éléments ne sont pas dans le bon ordre
- Refaire les étapes 1 et 2 (n-1) fois pour tous les éléments du tableau
Algorithme
DEF PROC Tri_Bulles(var t : tab ; n:entier)
{ étape 3 }
Pour i de 1 à (n-1) Faire
Pour j de 1 à (n-1) Faire
{ étape 1 }
Si t[j] > t[j+1] Alors
{ étape 2 }
Proc Permuter(t[j], t[j+1])
Fin Si
Fin Pour
Fin Pour
Fin Tri_Bulles
TDO |
Objet |
Type/Nature |
i, j |
entier |
d. Tri par insertion
Principe
- Supposer que la première partie du tableau (pour les indices inférieurs à i) est triée
- Sortir l’élément n° i du tableau (nommé k ⟵ t[i])
- Comparer cet éléments k avec les éléments d’indices inférieur (j є [1, i-1])
- Décaler toutes les valeurs supérieures à l’élément k (t[j] > k)
- Insérer k après le première valeur qui lui est inférieure.
Algorithme
DEF PROC Tri_Insertion(var t : tab ; n:entier)
{ étape 1 }
Pour i de 2 à n Faire
{ étape 2 }
k ⟵ t[i]
{ étape 3 }
j ⟵ i – 1
Tantque (j > 0) et (t[j] > k) Faire
{ étape 5 }
t[j+1] ⟵ t[j]
j ⟵ j – 1
Fin Tantque
{ étape 5 }
t[j + 1] ⟵ k
Fin Pour
Fin Tri_Insertion
TDO |
Objet |
Type/Nature |
i, j, k |
entier |
2. Les algorithmes de recherche
a. Définition
Les algorithmes de recherche sont utilisés pour retrouver une valeur dans un tableau, le tableau peut être ordonné
ou non.
b. Recherche Séquentielle
Principe
Parcourir le tableau à partir de la première valeur jusqu’à trouver la valeur recherchée ou parcourir tout le
tableau. Si la valeur est retrouvée on retourne son indice dans le tableau ou on peut aussi retourner un booléen
pour vérifier l’existence de l’élément.
Algorithme Recherche
DEF FN Recherche(val : entier ; t : tab ; n:entier):entier
pos ⟵ -1
i ⟵ 1
Tantque (pos = -1) et (i ≤ n) Faire
Si t[i] = val Alors
pos ⟵ i
Fin Si
i ⟵ i + 1
Fin Tantque
Recherche ⟵ pos
Fin Recherche
TDO |
Objet |
Type/Nature |
i, pos |
entier |
Algorithme Existe
DEF FN Existe(val : entier ; t : tab ; n:entier):booléen
trouve ⟵ faux
i ⟵ 1
Tantque (non trouve) et (i ≤ n) Faire
trouve ⟵ t[i] = val
i ⟵ i + 1
Fin Tantque
Existe ⟵ trouve
Fin Existe
TDO |
Objet |
Type/Nature |
i |
entier |
trouve |
booléen |
c. Recherche Dichotomique
Principe
La recherche dichotomique est opérée sur un tableau trié (ordonné), par exemple en ordre croissant.
On suppose que la variable d indique l’indice du premier élément du tableau et que f indique l’indice du dernier
élément du tableau.
- Calculer l’indice de l’élément m au centre : m ⟵ (d + f) div 2
- Si t[m] est égale à la valeur recherchée l’algorithme se termine
- Si t[m] est inférieur à la valeur recherchée on recherche dans la partie droite du tableau c’est-à-dire d ⟵ m +
1
- Si t[m] est supérieur à la valeur recherchée on recherche dans la partie droite du tableau c’est-à-dire f ⟵ m –
1
Algorithme
DEF FN RechercheDicho(val : entier ; t : tab ; n:entier):entier
pos ⟵ -1
d ⟵ 1
f ⟵ n
Répéter
m ⟵ (d + f) div 2
Si t[m] = val Alors Pos ⟵ m
Sinon Si t[m] < val Alors d ⟵ m + 1
Sinon f ⟵ m – 1
Fin Si
Jusqu’à (pos ≠ 0) ou (f < d)
Recherche ⟵ pos
Fin Recherche
TDO |
Objet |
Type/Nature |
i, d, f, m, pos |
entier |