



Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
algorithme de tri informatique sup spé cpge
Typology: Lecture notes
1 / 6
This page cannot be seen from the preview
Don't miss anything!




CPGE-AGADIR MP-PSI
Principe : Comparaison 2 à 2 des éléments adjacents et échange s'ils ne sont pas ordonnés. Le programme s'arrête lorsqu'on parcourt la liste sans faire d'échange Comme les bulles, les plus grands éléments remontent en fin de liste. Programme : def triBulles (T): echange = True n=len(T) while echange == True : echange = False for i in range(0,n-1) : if(T[i]> T[i+1]): T[i],T[i+1]=T[i+1],T[i] echange = True n=n- 2 - TRI PAR SELECTION Principe : Recherche du plus petit élément du tableau et échange avec le premier élément Recherche du plus petit élément du tableau entre les positions 2 et n -1 et échange avec le second élément ... Recherche du plus petit élément entre les positions n-2 et n-1 et échange avec élément en position n- Programme : 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 T[i],T [pmin] = T[pmin], T[i]
Principe : La liste étant triée jusqu'à l'élément i-1, insérer l'élément i à sa place parmi les i premiers éléments Programme : 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- T[j]= v 4- TRI RAPIDE (QUICK SORT) Le tri rapide (en anglais quick sort) est un algorithme de tri inventé par C.A.R. Hoare en 1961 et fondé sur la méthode de conception diviser pour régner. Son principe consiste à séparer l’ensemble des éléments en deux parties. Principe : L'algorithme peut s’effectuer récursivement: une valeur pivot est choisie au hasard. (peut aussi être le premier ou le dernier élément de la liste à trier). On crée un premier sous-ensemble constitué des éléments plus petits que le pivot. On les place à gauche du pivot. On crée de la même façon un deuxième sous-ensemble constitué des éléments plus grands que le pivot. On les place à droite de celui-ci. On procède de même, par récursivité, sur les deux sous-ensembles jusqu’à obtenir des sous ensembles d'un seul élément.
Calcul de complexité : Comptons le nombre de comparaisons La boucle for fait N-1 comparaisons Le pire des cas correspond au cas dans lequel 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 récurrence suivante: C(N)= N-1+ C(N-1) Donc C(N)= N^2 / d'où la complexité est O(N^2 ) Le meilleur des cas correspond à un segment coupé en deux moitiés égales. L'équation de récurrence devient alors: C(N)= N-1+2.C(N/2) On déduit que C(N)= N.log(N) donc la complexité est O(N.log(N))
Principe : Le tri par fusion est un algorithme de tri basé sur la technique algorithmique diviser pour régner. L'opération principale de l'algorithme est la fusion, qui consiste à réunir deux listes triées en une seule. Le principe de cet algorithme tend à adopter une formulation récursive : On découpe les données à trier en deux parties plus ou moins égales On trie les 2 sous-parties ainsi déterminées On fusionne les deux sous-parties pour retrouver les données de départ Exemple : Implémentation : L'implémentation de cet algorithme repose essentiellement en 2 fonctions : fusion : Permet de fusionner deux listes triées de telle sorte que la liste résultante la soit aussi. triFusion : Une fonction récursive qui assure le découpage de la liste et l'appel de la fonction de fusion. def fusion(L1, L2): res = [ ] i, j= 0, 0 while i< len(L1) and j< len(L2): if L1[i] <= L2[j]: res.append(L1[i]) i += 1 else: res.append(L2[j]) j += 1 return res+L1[i:]+L2[j:] def triFusion(L): if len(L) <= 1: return L m = len(L) // 2 return fusion( triFusion(L[:m]),triFusion(L[m:]))