La complexité algorithmique de la fonction 1 est de O(n*m) dans le pire des cas (si on explore l'intégralité des 2 tableaux) ou de O(n+m) dans le meilleur des cas (si les 2 tableaux contiennent une liste qu'avec la même valeur (par exemple un tableau qui contient que des 1)).
### Fonction 2
La complexité algorithmique de la fonction 2 est de O(x) dans le pire des cas (si le nombre est positif, il va le décrémenter de 1 jusqu'à qu'il soit égal à 0) ou de O(1) dans le meilleur des cas (si le nombre et négatif, il va retourner directement la valeur).
### Fonction 3
La complexité algorithmique de la fonction 3 est de O(1) car il change valeur si x est supérieur, égal ou inférieur à 0 puis il retourne la valeur.
## Exercice 3
La complexité algorithmique de la fonction "sort_students" est de : O(n*(m^3)).
```
// O(n*(m^3)) (on garde seulement m^3 et les autres s'annulent)
void sort_students(int** students_rank, int** students_array, int students_number, int grades_number)
{
int i = 0, j = 0;
// O(n)
for(i = 0; i <grades_number;i++)
{
int * grades = (int*) malloc(students_number*sizeof(int)); // O(1)