From 6782bd24011b3300d5392bded9c72cc1d86256eb Mon Sep 17 00:00:00 2001
From: gildas-bayogda <113912169+gildas-bayogda@users.noreply.github.com>
Date: Fri, 24 Nov 2023 04:02:54 +0100
Subject: [PATCH] Premiere partie

---
 .idea/.gitignore                              |   8 ++
 .idea/.name                                   |   1 +
 .idea/compiler.xml                            |   6 +
 .idea/gradle.xml                              |  15 +++
 .idea/jarRepositories.xml                     |  20 +++
 .idea/misc.xml                                |   5 +
 .idea/uiDesigner.xml                          | 124 ++++++++++++++++++
 .idea/vcs.xml                                 |   6 +
 .../fr/univamu/sorting/InsertionSort.java     |  28 ++++
 .../java/fr/univamu/sorting/QuickSort.java    |  50 +++++++
 .../java/fr/univamu/sorting/Sortable.java     |  19 +++
 .../fr/univamu/sorting/SortableIntArray.java  |  48 +++++++
 .../fr/univamu/sorting/SortableIntList.java   |  43 ++++++
 src/main/java/fr/univamu/sorting/Sorter.java  |   7 +
 .../java/fr/univamu/sorting/ListSortTest.java |  33 ++++-
 15 files changed, 411 insertions(+), 2 deletions(-)
 create mode 100644 .idea/.gitignore
 create mode 100644 .idea/.name
 create mode 100644 .idea/compiler.xml
 create mode 100644 .idea/gradle.xml
 create mode 100644 .idea/jarRepositories.xml
 create mode 100644 .idea/misc.xml
 create mode 100644 .idea/uiDesigner.xml
 create mode 100644 .idea/vcs.xml
 create mode 100644 src/main/java/fr/univamu/sorting/InsertionSort.java
 create mode 100644 src/main/java/fr/univamu/sorting/QuickSort.java
 create mode 100644 src/main/java/fr/univamu/sorting/Sortable.java
 create mode 100644 src/main/java/fr/univamu/sorting/SortableIntArray.java
 create mode 100644 src/main/java/fr/univamu/sorting/SortableIntList.java
 create mode 100644 src/main/java/fr/univamu/sorting/Sorter.java

diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /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 0000000..745a962
--- /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 0000000..312bf2e
--- /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 0000000..f9163b4
--- /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 0000000..fdc392f
--- /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 0000000..0afd27d
--- /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 0000000..2b63946
--- /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 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/src/main/java/fr/univamu/sorting/InsertionSort.java b/src/main/java/fr/univamu/sorting/InsertionSort.java
new file mode 100644
index 0000000..43dd300
--- /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 0000000..f0e7002
--- /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 0000000..5c9f004
--- /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 0000000..62e3bac
--- /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 0000000..64dc00d
--- /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 0000000..9412c7d
--- /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 921553e..a5b6dbf 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());
 
   }
 
-- 
GitLab