diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..13566b81b018ad684f3a35fee301741b2734c8f4
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000000000000000000000000000000000000..745a962ec808156ada5354764030471d89d77153
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+SortVisualization
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000000000000000000000000000000000000..312bf2eab8b229c84f94db3fd525d55fab3ad5ff
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <bytecodeTargetLevel target="20" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f9163b40e6f3594044b71ebcb4aee74d25d94ab4
--- /dev/null
+++ b/.idea/gradle.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="GradleSettings">
+    <option name="linkedExternalProjectsSettings">
+      <GradleProjectSettings>
+        <option name="externalProjectPath" value="$PROJECT_DIR$" />
+        <option name="modules">
+          <set>
+            <option value="$PROJECT_DIR$" />
+          </set>
+        </option>
+      </GradleProjectSettings>
+    </option>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fdc392fe877c32ab51d532fa67f65ff2e75e9061
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="RemoteRepositoriesConfiguration">
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Maven Central repository" />
+      <option name="url" value="https://repo1.maven.org/maven2" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="jboss.community" />
+      <option name="name" value="JBoss Community repository" />
+      <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="MavenRepo" />
+      <option name="name" value="MavenRepo" />
+      <option name="url" value="https://repo.maven.apache.org/maven2/" />
+    </remote-repository>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0afd27d06c38c5fa0f5c9616a0dad0eb83f2c910
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ExternalStorageConfigurationManager" enabled="true" />
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_20" project-jdk-name="20" project-jdk-type="JavaSDK" />
+</project>
\ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2b63946d5b31084bbb7dda418ceb3d75eb686373
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..35eb1ddfbbc029bcab630581847471d7f238ec53
--- /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/src/main/java/fr/univamu/sorting/InsertionSort.java b/src/main/java/fr/univamu/sorting/InsertionSort.java
new file mode 100644
index 0000000000000000000000000000000000000000..43dd3002e6c04572399d568942244ca3ef08f557
--- /dev/null
+++ b/src/main/java/fr/univamu/sorting/InsertionSort.java
@@ -0,0 +1,28 @@
+package fr.univamu.sorting;
+
+public class InsertionSort implements  Sorter{
+    private final Sortable sortable;
+    public InsertionSort( Sortable sortable){
+        this.sortable = sortable;
+    }
+
+    public void sort() {
+        int n = sortable.size();
+        for (int i = 1; i < n; ++i) {
+            int presentElement = sortable.get(i);
+            int j = i - 1;
+
+
+            while (j >= 0 && sortable.get(j) > presentElement) {
+                sortable.set(j + 1, sortable.get(j));
+                j = j - 1;
+            }
+            sortable.set(j + 1, presentElement);
+        }
+    }
+
+    public Sortable getSortable (){
+        return sortable;
+    }
+
+}
diff --git a/src/main/java/fr/univamu/sorting/QuickSort.java b/src/main/java/fr/univamu/sorting/QuickSort.java
new file mode 100644
index 0000000000000000000000000000000000000000..f0e7002af0837d969a4c5e2ee540563edd7c38db
--- /dev/null
+++ b/src/main/java/fr/univamu/sorting/QuickSort.java
@@ -0,0 +1,50 @@
+package fr.univamu.sorting;
+
+
+
+public class QuickSort implements Sorter {
+    private final Sortable sortable;
+
+    public QuickSort(Sortable sortable) {
+        this.sortable = sortable;
+    }
+
+    private int partition(int start , int end) {
+        int pivot = sortable.get(end);
+        int i = start - 1;
+
+        for (int j = start; j < end; j++) {
+            int bool = sortable.compare(sortable.get(j),pivot);
+            if (bool == -1 || bool==0){
+                i++;
+                sortable.swap(i, j);
+            }
+        }
+
+        sortable.swap(i + 1, end);
+        return i + 1;
+    }
+
+
+    public void sort() {
+        if (sortable == null || sortable.size() <= 1) {
+            return;
+        }
+        sort(0, sortable.size() - 1);
+    }
+
+    private void sort(int start, int end) {
+        if (start < end) {
+            int pivotIndex = partition(start, end);
+            sort(start, pivotIndex - 1);
+            sort(pivotIndex + 1, end);
+        }
+    }
+
+
+    public Sortable getSortable (){
+        return sortable;
+    }
+
+
+}
diff --git a/src/main/java/fr/univamu/sorting/Sortable.java b/src/main/java/fr/univamu/sorting/Sortable.java
new file mode 100644
index 0000000000000000000000000000000000000000..5c9f004b97c70054cb0e91177872d84e4d21d3d3
--- /dev/null
+++ b/src/main/java/fr/univamu/sorting/Sortable.java
@@ -0,0 +1,19 @@
+package fr.univamu.sorting;
+
+import java.util.List;
+
+public interface Sortable {
+    void  swap (int index1, int index2);
+
+    int compare (int index1, int index2);
+
+    int size();
+
+    int get( int index);
+
+    void  set(int index, int value);
+
+    List<Integer> getSortableParameter();
+
+
+}
diff --git a/src/main/java/fr/univamu/sorting/SortableIntArray.java b/src/main/java/fr/univamu/sorting/SortableIntArray.java
new file mode 100644
index 0000000000000000000000000000000000000000..62e3bac79a93aacc4722633a431282d184765f9b
--- /dev/null
+++ b/src/main/java/fr/univamu/sorting/SortableIntArray.java
@@ -0,0 +1,48 @@
+package fr.univamu.sorting;
+
+
+import java.util.List;
+
+public class SortableIntArray implements Sortable{
+    private final int[] array;
+
+    public SortableIntArray (int [] tab) {
+        this.array = tab;
+    }
+
+
+    public void swap(int index1, int index2){
+        int temp = array[index1];
+        array[index1] = array[index2];
+        array[index2] = temp;
+    }
+
+    public int compare (int index1, int index2){
+        if (index1 >= index2) {
+            if (index1 > index2) return 1;
+            else return 0;
+        } else {
+            return -1;
+        }
+    }
+
+    public int size(){
+        return array.length;
+    }
+
+
+    public int get(int index){
+        return array[index];
+    }
+
+    //// a voir avec le prof
+    @Override
+    public List<Integer> getSortableParameter() {
+        return null;
+    }
+
+    @Override
+    public void set(int index, int value) {
+        array[index] = value;
+    }
+}
diff --git a/src/main/java/fr/univamu/sorting/SortableIntList.java b/src/main/java/fr/univamu/sorting/SortableIntList.java
new file mode 100644
index 0000000000000000000000000000000000000000..64dc00d558d58155a7f193172350fe23e4c59e0d
--- /dev/null
+++ b/src/main/java/fr/univamu/sorting/SortableIntList.java
@@ -0,0 +1,43 @@
+package fr.univamu.sorting;
+
+import java.util.List;
+
+public class SortableIntList implements Sortable {
+    private final  List<Integer> list;
+
+    public SortableIntList (List<Integer> lists){
+        this.list = lists;
+    }
+
+    public void swap (int index1, int index2){
+        int temp = list.get(index1);
+        list.set(index1, list.get(index2));
+        list.set(index2, temp);
+    }
+
+    public int size(){
+        return list.size();
+    }
+
+    public int get (int index){
+        return list.get(index);
+    }
+
+    public int compare (int index1, int index2){
+        if (index1 >= index2) {
+            if (index1 > index2) return 1;
+            else return 0;
+        } else {
+            return -1;
+        }
+    }
+
+    public List<Integer> getSortableParameter() {
+        return list;
+    }
+
+    @Override
+    public void set(int index, int value) {
+        list.set(index,value);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/fr/univamu/sorting/Sorter.java b/src/main/java/fr/univamu/sorting/Sorter.java
new file mode 100644
index 0000000000000000000000000000000000000000..9412c7dab07019ab358ec9668667271b29ac3381
--- /dev/null
+++ b/src/main/java/fr/univamu/sorting/Sorter.java
@@ -0,0 +1,7 @@
+package fr.univamu.sorting;
+
+public interface Sorter {
+
+    void sort();
+    Sortable getSortable();
+}
diff --git a/src/test/java/fr/univamu/sorting/ListSortTest.java b/src/test/java/fr/univamu/sorting/ListSortTest.java
index 921553e59bc69f1b54a25df3977e3c22f8927563..a5b6dbfdf24230a9b9792e9eaa812922abb79e1f 100644
--- a/src/test/java/fr/univamu/sorting/ListSortTest.java
+++ b/src/test/java/fr/univamu/sorting/ListSortTest.java
@@ -2,9 +2,9 @@ package fr.univamu.sorting;
 
 import org.junit.jupiter.api.Test;
 
+
+import java.util.ArrayList;
 import java.util.List;
-import static fr.univamu.sorting.IntLists.*;
-import static org.assertj.core.api.Assertions.assertThat;
 
 class ListSortTest {
 
@@ -12,6 +12,35 @@ class ListSortTest {
 
   @Test
   void testSort() {
+    List<Integer> values = new ArrayList<>(List.of(2,0,28,15,88,1,61));
+    System.out.println(values);
+    // List<Integer> values = IntLists.shuffledRange(1,100);
+    Sortable sortableValues = new SortableIntList(values);
+    QuickSort sorter = new QuickSort(sortableValues);
+    sorter.sort();
+
+    Sortable sorterSortableValues = sorter.getSortable();
+
+    //List<Integer> sortedList = IntStream.rangeClosed(1,100).boxed().toList();
+
+    System.out.println(sorterSortableValues.getSortableParameter());
+
+  }
+
+@Test
+  void testInsertionSort() {
+    List<Integer> values = new ArrayList<>(List.of(2,0,28,15,88,1,61));
+    System.out.println(values);
+    // List<Integer> values = IntLists.shuffledRange(1,100);
+    Sortable sortableValues = new SortableIntList(values);
+    InsertionSort sorter = new InsertionSort(sortableValues);
+    sorter.sort();
+
+    Sortable sorterSortableValues = sorter.getSortable();
+
+    //List<Integer> sortedList = IntStream.rangeClosed(1,100).boxed().toList();
+
+    System.out.println(sorterSortableValues.getSortableParameter());
 
   }