CHAPITRE12 : les tris
But des algorithmes de tri.
Trier un tableau: c'est rangé les éléments d'un tableau en ordre croissant ou décroissant.
Il existe plusieurs méthodes de tri qui se différencient par leur complexité d'exécution et leur complexité de
compréhension pour le programmeur.
1- Tri par sélection (tri par minimum)
Cette méthode de tri commence par rechercher l'élément de la liste ayant la plus petite valeur pour
l'échanger avec celui situé en première position, puis elle recherche l'élément ayant la deuxième plus petite
valeur pour l'échanger avec celui situé en deuxième position et elle recommence ainsi jusqu'à atteindre le
dernier élément de la liste.
Cette méthode porte le nom de tri par sélection car elle procède à la sélection successive de l'élément
minimal parmi ceux restants
tri de [101, 115, 30, 63, 47, 20]
Étape 1 : [20, 115, 30, 63, 47, 101]
Étape 2 : [20, 30, 115, 63, 47, 101]
Étape 3 : [20, 30, 47, 63, 115, 101]
Étape 4 : [20, 30, 47, 63, 115, 101]
Résultat : [20, 30, 47, 63, 101, 115]
2- Tri par insertion
Cette méthode de tri considère les éléments de gauche à droite en insérant chacun à sa place parmi ceux déjà
triés situés sur sa gauche. Pour insérer l'élément couramment considéré, on déplace simplement les éléments
qui lui sont supérieurs un cran vers la droite et on l'insère dans la place laissée vacante
tri de [101, 115, 30, 63, 47, 20]
Étape 1 : [20, 115, 30, 63, 47, 101]
Étape 2 : [20, 115, 30, 63, 47, 101]
Étape 3 : [20, 30, 115, 63, 47, 101]
Étape 4 : [20, 30, 63, 115, 47, 101]
Étape 5 : [20, 30, 47, 63, 115, 101]
Étape 6 : [20, 30, 47, 63, 101, 115]
Résultat : [20, 30, 47, 63, 101, 115]
Programme en Python :
3- Tri à bulle
Cette méthode de tri consiste à traverser plusieurs fois la liste de gauche à droite en échangeant à chaque
passage des éléments adjacents placés dans un mauvais ordre relatif. Plus précisément, dès que l'élément de
plus grande valeur est rencontré lors de la première traversée, il est échangé avec chacun des éléments situés
à sa droite jusqu'à ce qu'il trouve sa place définitive, à l'extrémité droite de la liste. A la deuxième traversée,
c'est l'élément ayant la deuxième plus grande valeur qui est successivement poussé vers sa place définitive et
ainsi de suite
tri de [101, 115, 30, 63, 47, 20]
Étape 1 : [20, 115, 30, 63, 47, 101] Étape 2 : [20, 30, 115, 63, 47, 101] Étape 3 :[20, 30, 63, 115, 47, 101]
Étape 4 : [20, 30, 63, 47, 115, 101] Étape 5 :[20, 30, 63, 47, 101, 115] Étape 6 :[20, 30, 63, 47, 101, 115]
Étape 7 : [20, 30, 63, 47, 101, 115] Étape 8 :[20, 30, 47, 63, 101, 115] Étape 9 :[20, 30, 47, 63, 101, 115]
Étape 10 : [20, 30, 47, 63, 101, 115] Étape 11 :[20, 30, 47, 63, 101, 115] Étape 12 :[20, 30, 47, 63, 101, 115]
Étape 13 : [20, 30, 47, 63, 101, 115] Étape 14 :[20, 30, 47, 63, 101, 115] Étape 15 :[20, 30, 47, 63, 101, 115]
Résultat : [20, 30, 47, 63, 101, 115]
Programme en Python :
def triSelection(a) :
n = len(a)
for i in range(n) :
k = i
for j in range(i+1,n) :
if a[k] > a[j] :
k = j
a[k],a[i] = a[i],a[k]
a = [101, 115, 30, 63, 47, 20]; triSelection(a) ; print(a)
def triInsertion(a):
for i in range(len(a)):
x = a[i] # C’est l´élément à insérer
k = i # k est son indice
# Insertion dans la partie triée :
while k > 0 and a[k-1] > x:
# Décalage d’un cran sur la gauche :
a[k],a[k-1] = a[k-1],x
k = k-1
print(a)
return a
print(triInsertion([20, 115, 30, 63, 47, 101]))