diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/TD4_DEV51_Pietrois.iml b/.idea/TD4_DEV51_Pietrois.iml
new file mode 100644
index 0000000..d0876a7
--- /dev/null
+++ b/.idea/TD4_DEV51_Pietrois.iml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="PYTHON_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..105ce2d
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+<component name="InspectionProjectProfileManager">
+  <settings>
+    <option name="USE_PROJECT_PROFILE" value="false" />
+    <version value="1.0" />
+  </settings>
+</component>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..db8786c
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Black">
+    <option name="sdkName" value="Python 3.12" />
+  </component>
+  <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.12" project-jdk-type="Python SDK" />
+</project>
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..13e4be2
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/TD4_DEV51_Pietrois.iml" filepath="$PROJECT_DIR$/.idea/TD4_DEV51_Pietrois.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/Rapport.md b/Rapport.md
new file mode 100644
index 0000000..1548450
--- /dev/null
+++ b/Rapport.md
@@ -0,0 +1,30 @@
+# TD4: Complexité algorithmique
+
+## Exercice 2
+
+### function_1(tableau1,tableau2)
+> La complexité de cette fonction est de O(n*m) avec n la taille du premier tableau et m la taille du second
+> puisque le second tableau est parcouru n fois.
+
+### function_2(x) 
+> La complexité de cette fonction est de O(n) car x réduit de 1 à chaque itération jusqu'à atteindre 0.
+
+### function_3(x)
+> La complexité de cette fonction est de O(1) car il n'y a pas de boucle ni d'appel à d'autres fonctions.
+
+## Exercice 3
+
+> On a une boucle qui englobe toute la fonction<br>
+> A l'interieur de cette boucle on a :
+> - une boucle de complexité O(n)
+> - un bubblesort de complexité O(n²)
+> - une boucle contenant find_rank_student
+> 
+> find_rank_student possède à la fois une boucle et  un bubblesort, on a donc une complexité de O(n+n²) qu'on peut simplifier en O(n²)
+> <br> On a donc une complexité de O(m * n + n² + n²) que l'on peut simplifier en O(m * n²)
+
+## Exercice 4
+
+> Mon algorithme de tri est composé de deux bubblesort avec une complexité de O(N²) chacun
+> <br> Pour le premier bubblesort, il y a la fonction sum() utilisée, possédant une complexité de O(M)
+> <br> L'algorithme est donc de complexité O(M*N²)
\ No newline at end of file
diff --git a/main.py b/main.py
new file mode 100644
index 0000000..96b9a35
--- /dev/null
+++ b/main.py
@@ -0,0 +1,67 @@
+import random
+
+
+def function_1(tableau1,tableau2):
+    presentDansDeuxListes = 0
+    for nombre1 in tableau1:
+        for nombre2 in tableau2:
+            if nombre1 == nombre2:
+                presentDansDeuxListes += 1
+                break
+    return presentDansDeuxListes
+
+
+def function_2(x):
+    valeur = 0
+    while x > 0:
+        valeur = valeur + x
+        x -= 1
+    return valeur
+
+
+def function_3(x):
+    valeur = 0
+    if x < 0:
+        valeur = -x
+    if x == 0:
+        pass
+    if x > 0:
+        valeur = x
+    return valeur
+
+
+
+
+
+def algo_tri(tab):
+    N=len(tab)
+    M=len(tab[0])
+    for i in range(len(tab)):
+        for j in range(0, len(tab)-i-1):
+            if (sum(tab[j]) > sum(tab[j+1])):
+                temp = tab[j]
+                tab[j] = tab[j+1]
+                tab[j+1] = temp
+
+    for t in tab:
+        for i in range(len(t)):
+            for j in range(0, len(t)-i-1):
+                if (t[j] > t[j+1]):
+                    temp = t[j]
+                    t[j] = t[j+1]
+                    t[j+1] = temp
+
+
+data = []
+for i in range(10):
+    data.append([random.choice(range(10000)) for _ in range(3)])
+
+print(data)
+algo_tri(data)
+print(data)
+string = ""
+for i in data:
+    string += "["
+    string += str(sum(i))
+    string += "],"
+print(string)