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()); }