From f99c80ebc724fa6b13f91832061fd480b3ecbeb2 Mon Sep 17 00:00:00 2001 From: BAYOGDA Gildas <gildas-guemba.BAYOGDA@etu.univ-amu.fr> Date: Fri, 24 Nov 2023 15:09:35 +0100 Subject: [PATCH] ffff --- .idea/gradle.xml | 1 + .idea/misc.xml | 2 +- src/main/java/fr/univamu/sorting/App.java | 12 ++++- .../fr/univamu/sorting/CountingSortable.java | 49 +++++++++++-------- .../fr/univamu/sorting/InsertionSort.java | 5 +- .../fr/univamu/sorting/LoggingSortable.java | 27 ++-------- .../java/fr/univamu/sorting/QuickSort.java | 46 ++++++++--------- .../java/fr/univamu/sorting/Sortable.java | 1 - .../fr/univamu/sorting/SortableDecorator.java | 9 ++-- .../fr/univamu/sorting/SortableIntArray.java | 5 -- .../fr/univamu/sorting/SortableIntList.java | 3 -- src/main/java/fr/univamu/sorting/Sorter.java | 4 +- .../java/fr/univamu/sorting/ListSortTest.java | 38 +------------- 13 files changed, 72 insertions(+), 130 deletions(-) diff --git a/.idea/gradle.xml b/.idea/gradle.xml index f9163b4..ce1c62c 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 0afd27d..5d8b06f 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 40c78d1..0fba9c5 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 43bf9d2..c8eea0e 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 669138f..e33bf0e 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 6c9f912..133d21e 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 d3d66e9..ff2807d 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 2049048..3c36e13 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 3709e8d..b7c22c1 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 997b470..1aa6f3b 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 6823139..601d149 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 2249803..9aa0b7e 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 0591e40..13aa056 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 -- GitLab