# Ex 2 ```py def function_1(tableau1, tableau2): presentDansDeuxListes = 0 for nombre1 in tableau1: # O(n) for nombre2 in tableau2: # O(n²) if nombre1 == nombre2: presentDansDeuxListes += 1 break return presentDansDeuxListes ``` cette fonction à une complexité de **O(n²)** --- ```py def function_2(x): valeur = 0 while x > 0: # O(n) valeur = valeur + x x -= 1 # si x = 300, on passe dans le while 300 fois return valeur ``` cette fonction a une complexité de **O(n)** --- ```py def function_3(x): valeur = 0 if x < 0: valeur = -x if x == 0: pass if x > 0: valeur = x return valeur ``` cette fonction a une complexité de **O(1)** # Ex 3 ```py def entree_tri_fusion_multi(tab): return [tri_fusion(sub_tab) for sub_tab in tab] # Appliquer le tri fusion à chaque sous-tableau def tri_fusion(tab): if len(tab) <= 2: if tab[0] > tab[-1]: return tab[::-1] return tab mid = len(tab) // 2 # Trouver le milieu du tableau left = tri_fusion(tab[:mid]) # Diviser et trier la moitié gauche right = tri_fusion(tab[mid:]) # Diviser et trier la moitié droite return fusion(left, right) # Fusionner les deux moitiés triées def fusion(left, right): result = [] i = j = 0 while i < len(left) and j < len(right): # Tant qu'il reste des éléments dans les deux sous-tableaux if left[i] < right[j]: # Comparer les éléments des deux sous-tableaux result.append(left[i]) # Ajouter l'élément de gauche s'il est plus petit i += 1 else: result.append(right[j]) # Ajouter l'élément de droite sinon j += 1 result.extend(left[i:]) # Ajouter les éléments restants de gauche result.extend(right[j:]) # Ajouter les éléments restants de droite return result ``` --- ```py from tri_fusion import entree_tri_fusion_multi tab = [[5, 2, 9, 1, 5, 6], [3, 0, -1, 8, 7], [10, 20, 15, 30]] sorted_tab = entree_tri_fusion_multi(tab) print("Tableau trié :", sorted_tab) ``` ```bash Tableau trié : [[1, 2, 5, 5, 6, 9], [-1, 0, 3, 7, 8], [10, 15, 20, 30]] ``` La complexité de l'algorithme de tri fusion est **O(n log n)** pour chaque sous-tableau, où *n* est la taille du sous-tableau. Comme `entree_tri_fusion_multi` applique le tri fusion à chaque sous-tableau indépendamment, la complexité totale dépend de la somme des tailles des sous-tableaux, mais chaque tri reste en **O(n log n)**.