Vous êtes sur la page 1sur 44

Tris et recherche dans un

tableau
Pr. Najlaa ESSALHI
MPSI/PCSI
Plan du cours
• C’est quoi un tableau?
• Recherche d’une valeur dans un tableau
• Recherche séquentielle
• Recherche dichotomique
• Tri d’un tableau
• Tri par sélection
• Tri par insertion
• Tri à bulles
C’est quoi un tableau?
• En algorithmique, un tableau est une suite de valeurs stockées dans
des cases mémoire contiguës
• On représente graphiquement, par exemple, le tableau contenant la
suite de valeurs entières 3, 7, 42, 1, 4, 8, 12 de la manière suivante:
3 77 42 11 4 8 12

• En python, un tableau est représenté́ par une liste


• Dans tout ce qui suit on ne traite que des tableaux dont les éléments
sont de même type (homogènes)
Plan du cours
• C’est quoi un tableau?
• Recherche d’une valeur dans un tableau
• Recherche séquentielle
• Recherche dichotomique
• Tri d’un tableau
• Tri par sélection
• Tri par insertion
• Tri à bulles
Recherche d’une valeur dans un tableau/
Recherche séquentielle
• Principe: Parcourir le tableau et faire la comparaison de chaque
élément avec la valeur recherchée d’une manière séquentielle,
jusqu’à la rencontrer

• Implémentation en python:

Ligne1: La fonction appartient(x,t) prend deux paramètres: x la valeur recherchée


et t le tableau dans lequel on doit chercher la valeur x
Recherche d’une valeur dans un tableau/
Recherche séquentielle
• Principe: Parcourir le tableau et faire la comparaison de chaque
élément avec la valeur recherchée d’une manière séquentielle,
jusqu’à la trouver

• Implémentation en python:

Ligne2: Récupérer la longueur du tableau t dans la variable n


Ligne3: Initialiser une variable i par 0 pour indiquer l’élément à comparer avec x
Recherche d’une valeur dans un tableau/
Recherche séquentielle
• Principe: Parcourir le tableau et faire la comparaison de chaque
élément avec la valeur recherchée d’une manière séquentielle,
jusqu’à la trouver

• Implémentation en python:

Ligne4: on utilise la boucle « while » pour parcourir le tableau tant qu’on n’a pas
encore atteint sa fin ( i<n ) et on n’a pas rencontré un élément dont la valeur est
égale à la valeur de x ( t[i]!=x)
Recherche d’une valeur dans un tableau/
Recherche séquentielle
• Principe: Parcourir le tableau et faire la comparaison de chaque
élément avec la valeur recherchée d’une manière séquentielle,
jusqu’à la trouver

• Implémentation en python:

Ligne5: à chaque fois qu’on a vérifié les deux conditions de continuité de la


boucle « while » pour un élément d’indice i il faut passer à l’élément suivant en
donnant à i la valeur i+1
Recherche d’une valeur dans un tableau/
Recherche séquentielle
• Principe: Parcourir le tableau et faire la comparaison de chaque
élément avec la valeur recherchée d’une manière séquentielle,
jusqu’à la trouver

• Implémentation en python:

Ligne6: la fonction appartient(x,t) renvoie la valeur (booléanne) de la


comparaison entre i et n: « True » si i<n, la boucle « while » est interrompue car
la deuxième condition n’est pas vérifiée pour un élément t[i] dont la valeur est
égale à x. Voir l’exemple de la ligne 7 et le résultat d’exécution (Out[2])
Recherche d’une valeur dans un tableau/
Recherche séquentielle
• Principe: Parcourir le tableau et faire la comparaison de chaque
élément avec la valeur recherchée d’une manière séquentielle,
jusqu’à la trouver

• Implémentation en python:

Ligne6: « False » si i>=n, la boucle while est interrompue car la deuxième


condition est toujours vérifiée jusqu’à ce que le compteur i a dépassé la taille du
tableau (i>=n). voir l’exemple de la ligne 7 et le résultat d’exécution (Out[2])
Recherche d’une valeur dans un tableau/
Recherche séquentielle
• Remarques:
• Dans un algorithme de recherche séquentielle on peut bien sûr renvoyer
l’indice d’occurrence de la valeur recherchée dans le tableau
• Pour cela on peut remplacer la ligne 6 dans le programme précédent par les
lignes suivantes:
Recherche d’une valeur dans un tableau/
Recherche séquentielle
• Remarques:
• Dans le deuxième exemple (diapo précèdent), on a parcouru tout le tableau
et on a fait 4 comparaison (le nombre des éléments du tableau) pour envoyer,
en fin la valeur « False ».
• Donc, en général, on remarque bien que dans un algorithme de recherche
séquentielle, on peut aller jusqu’à faire n comparaisons dans le cas où la
valeur recherchée n’existe pas dans le tableau, avec n la taille du tableau qui
peut être très grande ce qui rend l’algorithme séquentiel très couteux.
Plan du cours
• C’est quoi un tableau?
• Recherche d’une valeur dans un tableau
• Recherche séquentielle
• Recherche dichotomique
• Tri d’un tableau
• Tri par sélection
• Tri par insertion
• Tri à bulles
Recherche d’une valeur dans un tableau/
Recherche dichotomique
• Principe: la recherche d’un élément dans un tableau peut être
réalisée de manière plus efficace, lorsque le tableau est trié.
• On coupe le tableau en deux par le milieu et on détermine si la valeur
x doit être recherchée dans la moitié gauche ou droite. En effet, il
suffit pour cela de la comparer avec la valeur centrale. Puis, on répète
le processus sur la portion sélectionnée.
Recherche d’une valeur dans un tableau/
Recherche dichotomique
• Principe:
• On calcule m l’indice du milieu du tableau
• On compare x avec t[m] : si x =T[m], on retourne l’indice m
si x>T[m], on cherche x dans la partie droite
si x<T[m], on cherche x dans la partie gauche
t[j]<t[m] t[j]>t[m]

…. t[m]

0 m-1 m m+1 n-1

• Exemple: on cherche la valeur 9 dans le tableau t suivant:


3 5 9 12 14 17 21 25 31
Recherche d’une valeur dans un tableau/
Recherche dichotomique
• Exemple: on cherche la valeur 9 dans le tableau t suivant:
• t est trié sinon on le trie 3 5 9 12 14 17 21 25 31

• On cherche l’indice m=(indice_debut+indice_fin)//2 tel que t[m] est la valeur


centrale: m=(0+8)4 et t[4]=14 3 5 9 12 14 17 21 25 31

• On compare x=9 et t[m]=14: 9<14 donc on recommence la recherche


dichotomique dans le sous tableau t[:4] (id_d=0, ind_f=3)
• m=1 et t[1]=5, 9>5 donc on recommence
3 5 sur9le sous
12tableau
14 t[2:4]
17 (id_d=2,
21 25id_f=3)
31

• m=2 et t[2]=9 donc on arrête la recherche


3 5 et 9on envoie
12 l’indice
14 17 d’occurrence
21 252 ou31
« True »
Recherche d’une valeur dans un tableau/
Recherche dichotomique
•Implémentation en python:
•Ligne3: on démarre la recherche
sur tout le tableau donc le premier
élément est d’indice 0 et le dernier
élément d’indice n-1
•À chaque itération on va traiter le
tableau t[g:d+1]: g est la variable
dont la valeur est l’indice du
premier élément (la borne gauche)
et d est la variable dont la valeur est
l’indice du dernier élément (la
borne droite)
Recherche d’une valeur dans un tableau/
Recherche dichotomique
•Implémentation en python:
•Ligne4: Tant que g<=d on continue
la recherche
•Ligne5: Affichage du sous-tableau
traité dans chaque itération
•Ligne6: Calcul de l’indice du milieu
du sous tableau traité. On coupe t
en deux sous tableaux t[:m] et
t[m+1:] de taille p ou p-1 chacun,
avec p et la partie entière inférieure
de n/2
Recherche d’une valeur dans un tableau/
Recherche dichotomique
•Implémentation en python:
•Ligne7-8: si t[m], la valeur de
l’élément d’indice m, est égale à x
donc on renvoie l’indice m
•Ligne9-10: si t[m]<x c à d on doit
recommencer la recherche dans le
sous tableau à droite t[m+1:] donc
g=m+1
t[j]<t[m] t[j]>t[m]
…. t[m]
0 m-1 m m+1 n-1

t[m+1:]
Recherche d’une valeur dans un tableau/
Recherche dichotomique
•Implémentation en python:
•Ligne11-12: sinon donc t[m]>x c à d
on doit recommencer la recherche
dans le sous tableau à gauche t[:m]
donc d=m-1
t[j]<t[m] t[j]>t[m]
…. t[m]
0 m-1 m m+1 n-1

t[:m]
•Ligne13: si on sort de la boucle
« while » sans rencontrer un m tel
que t[m]=x on renvoie, alors, la
valeur « None »
Plan du cours
• C’est quoi un tableau?
• Recherche d’une valeur dans un tableau
• Recherche séquentielle
• Recherche dichotomique
• Tri d’un tableau
• Tri par sélection
• Tri par insertion
• Tri à bulles
Tri d’un tableau
• Les algorithmes présentés sont valables pour n’importe quel type
d’éléments, pourvu qu’il soit muni d’un ordre total
• On suppose qu’on trie des tableaux, dans l’ordre croissant. On note N
le nombre d’éléments à trier.
Plan du cours
• C’est quoi un tableau?
• Recherche d’une valeur dans un tableau
• Recherche séquentielle
• Recherche dichotomique
• Tri d’un tableau
• Tri par sélection
• Tri par insertion
• Tri à bulles
Tri d’un tableau/ Tri par sélection
• Principe: Sur un tableau de n éléments, pour i=0,1,...n-2:
• Sélectionner l’indice du minimum de la partie du tableau comprise entre les indices « i» et
« n-1» inclus (le sous tableau t [i : n])
• Permuter le minimum trouvé avec l’élément de l’indice « i »
Tableau déjà
trié
…. t[i] t[i_min] ….

0 i-1 i i_min n-1

t[i:]

• Exemple: considérons le tableau des entiers t=[5,2,3,1,4]


• n=5 et i allant de 0 à 3
Tri d’un tableau/ Tri par sélection
Pour i=0: le plus petit élément 5 2 3 1 4
du sous tableau t[0, ...,5] est 0 3
d’indice 3 donc on permute t[3]
avec t[0], t[0:5]

Pour i=1: le plus petit élément 1 2 3 5 4


du sous tableau t[1, ...,5] est 1
d’indice 1 donc le tableau ne
sera pas modifié
t[1:5]
Tri d’un tableau/ Tri par sélection
Pour i=2: le plus petit élément 1 2 3 5 4
du sous tableau t[2, ...,5] est 2
d’indice 2 donc le tableau ne
sera pas modifié t[2:5]

Pour i=3: le plus petit élément 1 2 3 5 4


du sous tableau t[3, ...,5] est 3 4
d’indice 4 donc on permute t[3]
et t[4]
t[3:5]
1 2 3 4 5
Tri d’un tableau/ Tri par sélection
• Implémentation en python:
•Ligne3: on utilise la boucle «for »
pour répéter la sélection du
minimum sur le sous tableau t[i:]
pour i=0,1,…,n-2
Tableau déjà trié
…. t[i] ….
0 i-1 i n-1

t[i:]
•Ligne4-7:stocker la valeur de
l’indice du minimum dans la
variable i_min
Tri d’un tableau/ Tri par sélection
• Implémentation en python:
•Ligne8: permuter t[i] et t[i_min]

…. t[i] … t[i_min] …
0 i i_min n-1

t[i:]

•Ligne9: affichage du tableau t à


chaque itération i
Plan du cours
• C’est quoi un tableau?
• Recherche d’une valeur dans un tableau
• Recherche séquentielle
• Recherche dichotomique
• Tri d’un tableau
• Tri par sélection
• Tri par insertion
• Tri à bulles
Tri d’un tableau/ Tri par insertion
• pour un tableau de taille « n », à chaque étape i, pour i=1, 2, …, n-1 :
• la partie du tableau T[0 : i] est supposée déjà triée par ordre croissant ;
• on décale vers la droite les éléments de T[0 : i] tant qu'ils sont supérieurs à
T[i] ;
• puis on insère l’élément T[i] dans sa bonne position.

• Exemple: considérons le tableau des entiers t=[5,2,3,1,4]


• n=5, i=1,4
Tri d’un tableau/ Tri par insertion

Pour i=1, la valeur v=T[i]=2, on 5 2 3 1 4


doit l’insérer dans la bonne 1
position dans le sous tableau
t[0:1]=[5], donc 2<5 d’où on
aura t[1]=5 et t[0]=v. Alors
T=[2,5,3,1,4] t[:1]
v=2

2 5 3 1 4
Tri d’un tableau/ Tri par insertion

Pour i=2, la valeur v=T[i]= 3, on 2 5 3 1 4


doit l’insérer dans la bonne 2
position dans le sous tableau
T[0:2]=[2,5], donc 3<T[1]=5 d’où
on aura T[2]=5 et 3>T[0] donc
T[1]=v. Alors T=[2,3,5,1,4] T[:2]
v=3

2 3 5 1 4
Tri d’un tableau/ Tri par insertion

Pour i=3, la valeur v=T[i]=1, on 2 3 5 1 4


doit l’insérer dans la bonne 3
position dans le sous tableau
t[0:3]=[2,3,5], donc 1<T[2]=5
d’où on aura t[3]=5, 1<T[1]=3 T[:3]
donc T[2]=3 et 1<T[0]=2 donc
v=1
T[1]=2 et T[0]=v. Alors
T=[1,2,3,5,4] 1 2 3 5 4
Tri d’un tableau/ Tri par insertion

Pour i=4, la valeur v=T[i]= 4, on 1 2 3 5 4


doit l’insérer dans la bonne 4
position dans le sous tableau
t[0:4]=[1,2,3,5], donc 4<T[3]=5
d’où on aura T[4]=5, 4>T[2]=3
donc T[3]=v, Alors T=[1,2,3,4,5] T[:4]
v=4

1 2 3 4 5
Tri d’un tableau/ Tri par insertion
• Implémentation en python:
•Ligne2: à chaque itération, et
pour chaque élément du tableau t,
i reçoit son indice et v sa valeur,
•Ligne3: à chaque itération i, on
utilise une variable j pour parcourir
le sous tableau t[:i] et donc j est
initialisé par l’indice de son dernier
élément i-1
Tableau déjà trié
…. v ….

0 i-1 i n-1

t[:i]
Tri d’un tableau/ Tri par insertion
• Implémentation en python:
•Ligne4:la boucle est interrompue
si on a terminé le parcours du sous
tableau t[:i] (j<0) ou on a
rencontré une valeur t[j]>=v
•Ligne5: pour chaque valeur t[j]>v
on fait un décalage à droite
Si t[j]>v v
…. … T[i] ….

0 j j+1 i-1 i n-1

t[:i]
•Ligne6: j=j-1 pour parcourir les
sous tableau t[:i] de droite à
gauche
Tri d’un tableau/ Tri par insertion
• Implémentation en python:
•Ligne7:à la sortie de la boucle
« while » j contient la valeur de
l’indice de la bonne position ou on
doit insérer v mais décrémenter
par 1 (ligne 6), d’où v est insérée à
la position j+1

•Ligne8: affichage du tableau t à


chaque itération i
Plan du cours
• C’est quoi un tableau?
• Recherche d’une valeur dans un tableau
• Recherche séquentielle
• Recherche dichotomique
• Tri d’un tableau
• Tri par sélection
• Tri par insertion
• Tri à bulles
Tri d’un tableau/ Tri à bulles
• Principe: Pour chaque i de n-1 à 1
• A l’étape i, on parcourt le sous tableau [: i+1] et si deux éléments consécutifs
sont en désordre, on les échange.
• On est assuré en fin d’un passage d’avoir placé le plus grand élément du sous
tableau [:i+1] à sa place définitive d’indice i.
Si t[j]>t[j+1] tableau trié

… … t[i] ….
j j+1 i

t[:i+1]
• Exemple: considérons le tableau des entiers t=[5,2,3,1,4]
• n=5, i allant de 4 à 1
Tri d’un tableau/ Tri à bulles
Pour i=4:
- t[0]>t[1] donc permuter t[0] et t[1] 5 2 3 1 4
0 1 2 3 4

- t[1]>t[2] donc permuter t[1] et t[2] 2 5 3 1 4


0 1 2 3 4

- t[2]>t[3] donc permuter t[2] et t[3] 2 3 5 1 4


0 1 2 3 4

- t[3]>t[4] donc permuter t[3] et t[4] 2 3 1 5 4


0 1 2 3 4

2 3 1 4 5
0 1 2 3 4
Tri d’un tableau/ Tri à bulles

2 3 1 4 5
Pour i=3:
0 1 2 3 4
- t[0]<t[1]
2 3 1 4 5
- t[1]>t[2] donc permuter t[1] et t[2] 0 1 2 3 4
2 1 3 4 5
0 1 2 3 4
- t[2]<t[3]
2 1 3 4 5
0 1 2 3 4
Tri d’un tableau/ Tri à bulles
Pour i=2: 2 1 3 4 5
- t[0]>t[1] donc permuter t[0] et t[1] 0 1 2 3 4

- t[1]<t[2] 1 2 3 4 5
0 1 2 3 4
1 2 3 4 5
0 1 2 3 4

Pour i=1: 1 2 3 4 5
- t[0]<t[1]
0 1 2 3 4

1 2 3 4 5
0 1 2 3 4
Tri d’un tableau/ Tri à bulles
• Implémentation en python:
•Ligne3: faire monter le maximum
du tableau t[:i+1] à l’indice i pour
i=n-1,…,1
•Ligne4-6:Utiliser une variable j
pour parcourir le tableau t[:i+1] et
permuter les éléments t[j] et t[j+1]
si t[j]>t[j+1]
Si t[j]>t[j+1] tableau trié

… … t[i] ….
j j+1 i

t[:i+1]
• Vous pouvez définir vos propres propositions d’implémentations de
tous les algorithmes traités dans ce cours, mais, il faut respecter le
principe de base
• Pour certains algorithmes, on peut donner des versions récursives

Vous aimerez peut-être aussi