diff --git a/.idea/gradle.xml b/.idea/gradle.xml index f9163b40e6f3594044b71ebcb4aee74d25d94ab4..ce1c62c7c60561be6b5a9bc9f115e8966e9e5a4a 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> + <component name="GradleMigrationSettings" migrationVersion="1" /> <component name="GradleSettings"> <option name="linkedExternalProjectsSettings"> <GradleProjectSettings> diff --git a/.idea/misc.xml b/.idea/misc.xml index 0afd27d06c38c5fa0f5c9616a0dad0eb83f2c910..5d8b06f86cd10aba0a48e10650fda278ba7591d6 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,5 +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" /> + <component name="ProjectRootManager" version="2" languageLevel="JDK_20" default="true" project-jdk-name="20" project-jdk-type="JavaSDK" /> </project> \ No newline at end of file diff --git a/src/main/java/fr/univamu/sorting/App.java b/src/main/java/fr/univamu/sorting/App.java index 40c78d1a84da56424b6fdf4133993096f2f16161..0fba9c5738f2d16ec46ca04c5932907fa14fc447 100644 --- a/src/main/java/fr/univamu/sorting/App.java +++ b/src/main/java/fr/univamu/sorting/App.java @@ -6,7 +6,17 @@ import java.util.stream.Collectors; public class App { public static void main(String[] args) { - List<Integer> shuffled = IntLists.shuffledRange(0,1000); + + List<Integer> shuffled = IntLists.shuffledRange(0,10); + Sortable<Integer> a = new SortableIntList<>(shuffled); + // CountingSortable<Integer> Shuffled = new CountingSortable<>(a); + //CountingSortable<Integer> toSort = new CountingSortable<>(Shuffled); + Sorter Sort = new QuickSort<Integer>(a); + Sort.sort(); + System.out.println(Sort); + + + System.out.println( shuffled.stream() .map(String::valueOf) diff --git a/src/main/java/fr/univamu/sorting/CountingSortable.java b/src/main/java/fr/univamu/sorting/CountingSortable.java index 43bf9d2424c4605b2c08a820149729d28e4b846a..c8eea0e474a37812641b242d3e118d37df15ddc3 100644 --- a/src/main/java/fr/univamu/sorting/CountingSortable.java +++ b/src/main/java/fr/univamu/sorting/CountingSortable.java @@ -2,45 +2,52 @@ package fr.univamu.sorting; import java.util.List; -public class CountingSortable<T extends Comparable<T>> extends SortableDecorator<T> { +public class CountingSortable<T extends Comparable<T>> /* extends SortableDecorator<T> */ implements Sortable<T>{ + private Sortable<T> sortable; - private Sortable<T> values; - public static int countingSwaps = 0; - public static int countingCompare = 0; + @Override + public void swap(int index1, int index2) { - public CountingSortable( Sortable<T> values) { - super(values); } - - public int size(){ - return super.size(); + @Override + public int compare(int index1, int index2) { + return 0; } - public T get(int index){ - return super.get(index); + @Override + public int size() { + return 0; } + @Override + public T get(int index) { + return null; + } - public void swap (int index1, int index2){ - countingSwaps++; - super.swap(index1,index2); + @Override + public void set(int index, T value) { } - public int compare (int index1, int index2){ - countingCompare ++; - return super.compare(index1,index2); + public int countingSwaps = 0; + public int countingCompare = 0; + public CountingSortable(Sortable<T> values) { + this.sortable = values; } - public void set(int index, T value) { - super.set(index, value); + + public void swapAction (int index1, int index2){ + countingSwaps++; + sortable.swap(index1,index2); + } - public List<T> getSortableParameter() { - return super.getSortableParameter(); + public void compareAction(int index1, int index2){ + countingCompare ++; + sortable.compare(index1, index2); } public int getCountingCompare() { diff --git a/src/main/java/fr/univamu/sorting/InsertionSort.java b/src/main/java/fr/univamu/sorting/InsertionSort.java index 669138f120b627c932e29c0c910d8519526358b3..e33bf0ecfb34cbe1bed39222cf64df37efdafefe 100644 --- a/src/main/java/fr/univamu/sorting/InsertionSort.java +++ b/src/main/java/fr/univamu/sorting/InsertionSort.java @@ -1,6 +1,6 @@ package fr.univamu.sorting; -public class InsertionSort<T extends Comparable<T>> implements Sorter<T>{ +public class InsertionSort<T extends Comparable<T>> implements Sorter{ private final Sortable<T> sortable; public InsertionSort( Sortable<T> sortable){ this.sortable = sortable; @@ -22,8 +22,5 @@ public class InsertionSort<T extends Comparable<T>> implements Sorter<T>{ } - public Sortable<T> getSortable (){ - return sortable; - } } diff --git a/src/main/java/fr/univamu/sorting/LoggingSortable.java b/src/main/java/fr/univamu/sorting/LoggingSortable.java index 6c9f91247a9e620d8cd0ebb92f09ebbdf6e6a368..133d21e33856936298f16b2a2e9a5bc2ad7417d0 100644 --- a/src/main/java/fr/univamu/sorting/LoggingSortable.java +++ b/src/main/java/fr/univamu/sorting/LoggingSortable.java @@ -5,7 +5,7 @@ import java.util.List; public class LoggingSortable<T extends Comparable<T>> extends SortableDecorator<T> { - private Sortable<T> values; + private PrintStream logStream; public LoggingSortable (Sortable<T> values){ @@ -14,37 +14,16 @@ public class LoggingSortable<T extends Comparable<T>> extends SortableDecorator< @Override - public void swap(int index1, int index2) { - super.swap(index1, index2); + public void swapAction(int index1, int index2) { logStream.println("swap : "+index1+" et "+index2); } @Override - public int compare(int index1, int index2) { + public void compareAction (int index1, int index2) { logStream.println("Compare : "+index1+" et "+index2); - return super.compare(index1,index2); - - } - - @Override - public int size() { - return super.size(); - } - @Override - public T get(int index) { - return super.get(index); - } - - @Override - public void set(int index, T value) { - super.set(index, value); } - @Override - public List<T> getSortableParameter() { - return super.getSortableParameter(); - } public PrintStream getLogStream() { return logStream; diff --git a/src/main/java/fr/univamu/sorting/QuickSort.java b/src/main/java/fr/univamu/sorting/QuickSort.java index d3d66e9de8b5fe3e1dbb672d6c5bb10841bfa8c9..ff2807df756ddc7d2e2b8be4c6ba837c655ec7a3 100644 --- a/src/main/java/fr/univamu/sorting/QuickSort.java +++ b/src/main/java/fr/univamu/sorting/QuickSort.java @@ -2,49 +2,43 @@ package fr.univamu.sorting; -public class QuickSort<T extends Comparable<T>> implements Sorter<T> { +public class QuickSort<T extends Comparable<T>> implements Sorter { private final Sortable<T> sortable; public QuickSort(Sortable<T> sortable) { this.sortable = sortable; } - private int partition(int start , int end) { + private void partition(int start , int end) { //T pivot = sortable.get(end); - int i = start - 1; - - for (int j = start; j < end; j++) { - int bool = sortable.compare(j,end); - if (bool <= 0){ + if (end <= start) { + return; + } + int i = start + 1; + int j = end; + while (i < j) { + while (i <= j && sortable.compare(start,i) > 0) { i++; - sortable.swap(i, j); } + while (i <= j && sortable.compare(start,j) < 0) { + j--; + } + if (i >= j) { break; } + sortable.swap(i,j); + i++; + j--; } - - sortable.swap(i + 1, end); - return i + 1; + sortable.swap(start,i-1); + partition(start,i-1); + partition(i+1,end); } public void sort() { - if (sortable == null || sortable.size() <= 1) { - return; - } - sort(0, sortable.size() - 1); + partition(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<T> getSortable (){ - return sortable; - } - } diff --git a/src/main/java/fr/univamu/sorting/Sortable.java b/src/main/java/fr/univamu/sorting/Sortable.java index 2049048c164d3ba5ccbb2ea23599efa89a36df7b..3c36e1349d5e65ea28bebb93249915822ba71713 100644 --- a/src/main/java/fr/univamu/sorting/Sortable.java +++ b/src/main/java/fr/univamu/sorting/Sortable.java @@ -13,7 +13,6 @@ public interface Sortable<T extends Comparable<T>> { void set(int index,T value); - List<T> getSortableParameter(); } diff --git a/src/main/java/fr/univamu/sorting/SortableDecorator.java b/src/main/java/fr/univamu/sorting/SortableDecorator.java index 3709e8d497b1be43f8776fc8b7f9b3ba6b429202..b7c22c1b4cec5e72f84af6e380d89c1a9ed7eae6 100644 --- a/src/main/java/fr/univamu/sorting/SortableDecorator.java +++ b/src/main/java/fr/univamu/sorting/SortableDecorator.java @@ -24,19 +24,18 @@ public abstract class SortableDecorator<T extends Comparable<T>> implements Sort values.set(index,value); } - @Override - public List<T> getSortableParameter() { - return values.getSortableParameter(); - } - @Override public int compare(int index1, int index2) { + this.compareAction(index1,index2); return values.compare(index1,index1); } + protected abstract void compareAction(int index1, int index2); + @Override public void swap(int index1, int index2) { values.swap(index1,index2); } + protected abstract void swapAction (int index1, int index2); } diff --git a/src/main/java/fr/univamu/sorting/SortableIntArray.java b/src/main/java/fr/univamu/sorting/SortableIntArray.java index 997b47014329810cf82326b4fb04f8f17708ab14..1aa6f3b91c7b2ee2abade666857e655daff59bb2 100644 --- a/src/main/java/fr/univamu/sorting/SortableIntArray.java +++ b/src/main/java/fr/univamu/sorting/SortableIntArray.java @@ -43,11 +43,6 @@ public class SortableIntArray<T extends Comparable<T>> implements Sortable <T>{ return array[index]; } - //// a voir avec le prof - @Override - public List<T> getSortableParameter() { - return Arrays.asList(array); - } @Override public void set(int index, T value) { diff --git a/src/main/java/fr/univamu/sorting/SortableIntList.java b/src/main/java/fr/univamu/sorting/SortableIntList.java index 6823139a58666d0fd3e6b6ab866d35c5954b0852..601d14934c11173afedfdee61a85897fec598a98 100644 --- a/src/main/java/fr/univamu/sorting/SortableIntList.java +++ b/src/main/java/fr/univamu/sorting/SortableIntList.java @@ -37,9 +37,6 @@ public class SortableIntList <T extends Comparable<T>> implements Sortable<T> { //return compare(index1,index2); }*/ - public List<T> getSortableParameter() { - return list; - } @Override public void set(int index, T value) { diff --git a/src/main/java/fr/univamu/sorting/Sorter.java b/src/main/java/fr/univamu/sorting/Sorter.java index 2249803d48aaeb845b825cf8864a1083782766d2..9aa0b7ef80224177caa7083bb50c23acbf363b28 100644 --- a/src/main/java/fr/univamu/sorting/Sorter.java +++ b/src/main/java/fr/univamu/sorting/Sorter.java @@ -1,7 +1,7 @@ package fr.univamu.sorting; -public interface Sorter<T extends Comparable<T>> { +public interface Sorter { void sort(); - Sortable<T> getSortable(); + } diff --git a/src/test/java/fr/univamu/sorting/ListSortTest.java b/src/test/java/fr/univamu/sorting/ListSortTest.java index 0591e40b7709a4d98a1eeaf6ddb920838c21dfbf..13aa056b10fb78ce907b82a10b078a0d479bdc06 100644 --- a/src/test/java/fr/univamu/sorting/ListSortTest.java +++ b/src/test/java/fr/univamu/sorting/ListSortTest.java @@ -11,43 +11,7 @@ class ListSortTest { @Test - void testQuickSort() { - 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<Integer> sortableValues = new SortableIntList<>(values); - //CountingSortable<Integer> countingSortable = new CountingSortable<>(sortableValues); - CountingSortable<Integer> countingSortable = new CountingSortable<>(sortableValues); - LoggingSortable<Integer> loggingSortable = new LoggingSortable<>(sortableValues); - QuickSort<Integer> sorter = new QuickSort<Integer>(countingSortable); - sorter.sort(); - - Sortable<Integer> sorterSortableValues = sorter.getSortable(); - - //List<Integer> sortedList = IntStream.rangeClosed(1,100).boxed().toList(); - - System.out.println(sorterSortableValues.getSortableParameter()); - System.out.println("nombreSwaps: "+countingSortable.getCountingSwaps()); - System.out.println("nombreCompare: "+countingSortable.getCountingCompare()); - System.out.println(loggingSortable.getLogStream()); + void testSort() { } - -@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<Integer> sortableValues = new SortableIntList<>(values); - InsertionSort<Integer> sorter = new InsertionSort<>(sortableValues); - sorter.sort(); - - Sortable<Integer> sorterSortableValues = sorter.getSortable(); - - //List<Integer> sortedList = IntStream.rangeClosed(1,100).boxed().toList(); - - System.out.println(sorterSortableValues.getSortableParameter()); - - } - } \ No newline at end of file