Trix
Trix
Trix
MTHODES DE TRIS
M.Gueroihi
1
DEFINITION
Un algorithme de tri est, en informatique ou en
mathmatiques, est un algorithme qui permet
d'organiser une collection d'objets selon un ordre
dtermin. Les objets trier font donc partie d'un
ensemble muni d'une relation d'ordre. Les ordres
les plus utiliss sont lordre numrique et l'ordre
lexicographique.
Source : Wikipdia
2
I- TRI A BULLES
Principe :
Comparaison 2 2 des lments adjacents
et change s'ils ne sont pas ordonns. Le
programme s'arrte lorsqu'on parcourt la liste
sans faire d'change
Comme les bulles, les plus grands lments
remontent en fin de liste
3
I- TRI A BULLES
def triBulles (T):
echange = True
while echange == True :
echange = False
for i in range(0,len(T)-1) :
if(T[i]> T[i+1]):
T[i],T[i+1]=T[i+1],T[i]
echange = True
Complexit : O(n2)
4
II- TRI PAR SLECTION
Principe :
Recherche du plus petit lment du tableau et change
avec le premier lment
Recherche du plus petit lment du tableau entre les
positions 2 et n-1 et change avec le second lment
...
5
II- TRI PAR SLECTION
def triSelection (T):
for i in range(0,len(T)-1):
pmin= i
for j in range (i+1, len(T)):
if T[j] < T [pmin]:
pmin= j
if pmin!= i:
T[i],T [pmin] = T[pmin], T[i]
Complexit : O(n2)
6
III- TRI PAR INSERTION :
Principe :
La liste tant trie jusqu' l'lment i-1,
insrer l'lment i sa place parmi les i
premiers lments
7
III- TRI PAR INSERTION :
def tri_Insertion(T) :
n=len(T)
for i in range(1,n):
v = T[i]
j = i
while j>0 and T[j-1]> V :
T[j]= T[j-1]
j = j-1
T[j]= v
Complexit : O(n2)
8
IV- TRI RAPIDE
QUICK SORT
9
IV- TRI RAPIDE
Principe :
11
IV- TRI RAPIDE
Exemple 2 :
12
IV- TRI RAPIDE
13
TRI PRAPIDE PYTHON-
SOLUTION 1
def Trirapide(L):
if L==[]: return[]
#on va balayer la liste L et repartir les valeurs
n=len(L)
L1=[]
L2=[]
pivot=L[0] #ici on a pris le premier lment comme pivot.
for k in range(1,n):
if L[k]<= pivot:
#L1 reoit les lments plus petits
L1.append(L[k])
else:
#L2 reoit les lments plus grands
L2.append(L[k])
L = Trirapide(L1) + [pivot] + Trirapide(L2)
return L
14
TRI PRAPIDE PYTHON-
SOLUTION 2
Pour implmenter l'algorithme tri rapide on a besoin de programmer trois
fonctions:
1. La fonction :
partitionner(T, premier, dernier) prend le tableau T et deux
indices premier et dernier en arguments, (avec premier et dernier inclus).
On suppose qu'il y a au moins un lment dans ce segment,
2. La fonction :
tri_Rapide_Partition(T,premier,dernier): qui permet de
trier le tableau T en le partitionnant rcursivement en sous-tableaux.
3. La fonction :
triRapide(T) permettant de trier le tableau T en utilisant la fonction
tri_Rapide_Partition.
15
TRI PRAPIDE PYTHON-
SOLUTION 2
1. La fonction :
partitionner(T, premier, dernier) prend le tableau T et deux
indices premier et dernier qui permet de partitionner le tableau T en 2 parties et
positionne le pivot sa position dfinitive et retourne son indice.
17
TRI PRAPIDE PYTHON-
SOLUTION 2
3. La fonction :
triRapide(T) permettant de trier le tableau T en appelant la fonction
tri_Rapide_Partition.
def triRapide(T):
tri_Rapide_Partition( T, 0, len(T) -1 )
Appel.
18
TRI PRAPIDE
COMPLEXIT
La fonction partitionner fait toujours exactement dernier premier- 1
comparaisons.
Si La fonction partitionner dtermine un segment de longueur K et un autre
de longueur N-1-k, la fonction tri_ Rapide_Partition va donc effectuer N- 1
comparaisons par l'intermdiaire de partitionner, puis d'autres
comparaisons par l'intermdiaire des deux appels rcursifs la fonction
tri_Rapide_Partition
Le pire des cas correspond K=0 (c'est dire quand une des parties est
vide et l'autre contient n-1), ce qui donne, en notant C(N) la complexit du
tri d'un tableau de longueur N, l'quation de rcurrence suivante:
C(N)= N-1+ C(N-1)
Donc C(N)= N2/2 , d'o la complexit est O(N2)
Le meilleur des cas correspond un segment coup en deux moitis
gales, c'est--dire K = N/2. L'quation de rcurrence devient alors:
C(N)= N-1+2.C(N/2)
On dduit que C(N)= N.log(N), donc la complexit est O(N.log(N))
19
V- TRI PAR FUSION
Principe :
Le tri par fusion est un
algorithme de tri bas sur la
technique algorithmique
diviser pour rgner.
L'opration principale de
l'algorithme est la fusion, qui
consiste runir deux listes
tries en une seule.
20
V- TRI PAR FUSION
Principe :
Le principe de cet algorithme tend adopter une formulation
rcursive :
21
V- TRI PAR FUSION
Exemple:
22
V- TRI PAR FUSION
Implmentation :
23
V- TRI PAR FUSION
Fonction Fusion :
def triFusion(L):
if len(L) <= 1: return L
m = len(L) // 2
return fusion( triFusion(L[:m]),
triFusion(L[m:]))
Appel.
25
V- TRI PAR FUSION
COMPLEXIT
Si on note :
C(N) : le nombre total de comparaisons effectues par la fonction triFusion
f (N) : le nombre total de comparaisons effectues par la fonction Fusion
Pour trier un tableau de longueur N, on a lquation de rcurrence suivante:
C(N)=2.C(N/2)+ f (N)
Les deux appels rcursifs se font sur deux segments de mme longueur N/2
Dans le meilleur des cas, la fonction Fusion n'examine que les lments de l'un
des deux segments car ils sont tous plus petits que ceux de l'autre segment.
Dans ce cas f (N)= N/2, donc C(N)= ().N.log(N) , d'o la complexit est :
O(N.log(N))
Dans le pire des cas, tous les lments sont examins par la fonction Fusion
Dans ce cas f (N)= N-1,
donc C(N)= N.log(N). D'o la complexit est :
O(N.log(N))
26
COMPARAISON DE COMPLEXIT DE
DIFFRENTES METHODES DE TRIS
27