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]))
Programme en Python :
def triBulles(a):
for i in range(len(a)-1, 0, -1):
# positionner le prochain plus grand élément
for j in range(i):
# échanger les éléments adjacents s'ils sont dans un mauvais ordre relatif
if a[j] > a[j+1]:
a[j], a[j+1] = a[j+1], a[j]
print(a)
return a
print(triBulles([20, 115, 30, 63, 47, 101]))
4- Recherche séquentielle
consiste à parcourir séquentiellement la liste jusqu'à atteindre l'élément cherché. Si l'élément recherché est
trouvé, sa position dans la liste est, dans ce cas, retournée par l'algorithme.
Programme python:
def RechercheSeq(l, c):
position = -1
i = 0
while i < len(l):
if l[i] == c:
position = i
break
else:
i += 1
return position
rech=RechercheSeq([4,8,5,99,45,6,3],9)
if rech==-1:
print('n\'existe pas')
else:
print('existe en position:',rech)
5- Recherche dichotomique dans un tableau trié
consiste à comparer l'élément cherché avec l'élément central de la liste. Si l'élément cherché lui est inférieur,
il doit se trouver dans la première moitié de la liste; si l'élément cherché lui est supérieur, il doit se trouver
dans la deuxième moitié de la liste. En appliquant récursivement cette technique à la moitié choisie,
l'algorithme aboutira soit à la position de l'élément cherché, soit à aucune position auquel cas l'élément
n'appartient pas à la liste
Programme python
def RechercheDico(l, c):
position = -1
gauche = 0
droite = len(l)-1
while gauche <= droite:
milieu = (gauche+droite)//2
if c == l[milieu]:
position = milieu
break
else:
if c < l[milieu]:
droite = milieu -1
else:
gauche = milieu + 1
return position
rech=RechercheDico([4,5,6,7,8,9],9)
if rech==-1:
print('n\'existe pas')
else:
print('existe en position:',rech)
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !