Dans le pire des cas l'algorithme 1 aura une complexité algorithmique de O(n.m) avec n et m respectivement pour le tableau 1 et le tableau 2.
Dans le meilleur des cas l'algorithme 1 aura une complexité algorithmique de O(n) avec n pour le tableau 1.
### Programme 2 :
La complexité algorithmique de la fonction 2 est O(n), où n est la valeur initiale de x.
### Programme 3 :
La complexité de la fonction 3 est O(1) car elle effectue un nombre constant d'opérations, et ce indépendamment de la valeur de x.
## Exercice 3 :
La complexité totale de `sort_students` est donnée par l'appel à `bubblesort` et à la fonction `find_rank_student`, qui ont toutes deux une complexité égale au nombre d'étudiants au carré (donc O(student_number²)), et ce, pour chaque itération de la boucle extérieure (grade_number est également une valeur décisive).
La complexité est donc égale à O(grade_number\*student_number²) ou O(n*m²).
L'algorithme de tri par sélection nécessite de comparer chaque élément avec tous les éléments suivants, ce qui donne une complexité de \(O(n²)\) pour trier \(n\) éléments.