From d6111aa0108c39d28799516e4e8964a20f437be8 Mon Sep 17 00:00:00 2001 From: a22027291 <Salim.adamou@etu.univ-amu.fr> Date: Fri, 24 Nov 2023 15:02:13 +0100 Subject: [PATCH] correction --- .../fr/univamu/sorting/InsertionSort.java | 30 +++++++++++++++++++ src/main/java/fr/univamu/sorting/Sort.java | 18 ++++++----- .../java/fr/univamu/sorting/Sortable.java | 12 ++++++++ .../fr/univamu/sorting/SortableIntArray.java | 17 +++++++---- .../fr/univamu/sorting/SortableIntList.java | 18 ++++++----- src/main/java/fr/univamu/sorting/Sorter.java | 5 ++++ .../java/fr/univamu/sorting/ListSortTest.java | 6 +++- 7 files changed, 85 insertions(+), 21 deletions(-) create mode 100644 src/main/java/fr/univamu/sorting/InsertionSort.java create mode 100644 src/main/java/fr/univamu/sorting/Sortable.java create mode 100644 src/main/java/fr/univamu/sorting/Sorter.java 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..7cdc719 --- /dev/null +++ b/src/main/java/fr/univamu/sorting/InsertionSort.java @@ -0,0 +1,30 @@ +package fr.univamu.sorting; + +public class InsertionSort<T extends Comparable<T>> implements Sorter<T> { + private Sortable<T> sortable; + + public InsertionSort(Sortable<T> sortable) { + this.sortable = sortable; + } + + @Override + public void sort() { + insertionSort(sortable); + } + private void insertionSort(Sortable<T> sortable){ + + int n = sortable.size(); + + for (int i = 1; i < n; ++i) { + T key = sortable.get(i); + int j = i - 1; + + while (j >= 0 && sortable.compare(j, key) > 0) { + sortable.Swap(j + 1, j); + j = j - 1; + } + + sortable.set(j + 1, key); + } + } +} \ No newline at end of file diff --git a/src/main/java/fr/univamu/sorting/Sort.java b/src/main/java/fr/univamu/sorting/Sort.java index afba558..272ea4c 100644 --- a/src/main/java/fr/univamu/sorting/Sort.java +++ b/src/main/java/fr/univamu/sorting/Sort.java @@ -1,15 +1,19 @@ package fr.univamu.sorting; -public class Sort { +public class Sort<T extends Comparable<T>> { + private Sortable<T> sortable; + public Sort(Sortable<T> sortable){ + this.sortable = sortable; + } public void sort(){ - bubbleSort(); + bubbleSort(sortable); } - public void bubbleSort(){ + public void bubbleSort(Sortable<T> sortable){ - for( int i=0; i< data.size()-1; i++){ - for(int j=0 ; j< data.size()-1-i; j++){ - if(compare(j,j+1)>0){ - Swap(j,j+1); + for( int i=0; i< sortable.size()-1; i++){ + for(int j=0 ; j< sortable.size()-1-i; j++){ + if(sortable.compare(j,j+1)>0){ + sortable.Swap(j,j+1); } } } 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..f6e292b --- /dev/null +++ b/src/main/java/fr/univamu/sorting/Sortable.java @@ -0,0 +1,12 @@ +package fr.univamu.sorting; + +import java.util.List; + +public interface Sortable<T extends Comparable<T>> { + void Swap(int index1, int index2); + int compare(int index1, int index2); + int size(); + T get(int index); + void set(int index, T value); + +} diff --git a/src/main/java/fr/univamu/sorting/SortableIntArray.java b/src/main/java/fr/univamu/sorting/SortableIntArray.java index cab2462..92092bb 100644 --- a/src/main/java/fr/univamu/sorting/SortableIntArray.java +++ b/src/main/java/fr/univamu/sorting/SortableIntArray.java @@ -1,24 +1,29 @@ package fr.univamu.sorting; import java.util.List; - -public class SortableIntArray { - private int[]data; - public SortableIntArray(int [] data){ +public class SortableIntArray<T extends Comparable> implements Sortable<T> { + private T[]data; + public SortableIntArray(T [] data){ this.data = data; } + public void Swap (int index1, int index2){ - Integer x = data[index1]; + T x = data[index1]; data[index1] = data[index2]; data[index2]= x; } public int compare(int index1, int index2){ - return data[index1]- data[index2]; + return data[index1].compareTo(data[index2]); } public int size() { return data.length; } + + @Override + public T get(int index) { + return data[index]; + } } diff --git a/src/main/java/fr/univamu/sorting/SortableIntList.java b/src/main/java/fr/univamu/sorting/SortableIntList.java index ffcf935..8d43dd6 100644 --- a/src/main/java/fr/univamu/sorting/SortableIntList.java +++ b/src/main/java/fr/univamu/sorting/SortableIntList.java @@ -2,27 +2,31 @@ package fr.univamu.sorting; import java.util.List; -public class SortableIntList { - private List<Integer> data; - public SortableIntList(List<Integer> data){ +public class SortableIntList<T extends Comparable<T>> implements Sortable<T> { + private List<T> data; + public SortableIntList(List<T> data){ this.data = data; } public void Swap (int index1, int index2){ - Integer x = data.get(index1); + T x = data.get(index1); data.set(index1, data.get(index2)); data.set(index2, x); } public int compare(int index1, int index2){ - return data.get(index1)- data.get(index2); + return data.get(index1).compareTo(data.get(index2)); } public int size(){ return data.size(); } - public int get(int index){ - return data.get(index); + public T get(int index){ + return (T) data.get(index); + } + + public void set(int index, T value){ + data.set(index, value); } public void sort(){ 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..f6016a5 --- /dev/null +++ b/src/main/java/fr/univamu/sorting/Sorter.java @@ -0,0 +1,5 @@ +package fr.univamu.sorting; + +public interface Sorter<T extends Comparable<T>> { + void sort(); +} diff --git a/src/test/java/fr/univamu/sorting/ListSortTest.java b/src/test/java/fr/univamu/sorting/ListSortTest.java index 921553e..8099c93 100644 --- a/src/test/java/fr/univamu/sorting/ListSortTest.java +++ b/src/test/java/fr/univamu/sorting/ListSortTest.java @@ -7,12 +7,16 @@ import static fr.univamu.sorting.IntLists.*; import static org.assertj.core.api.Assertions.assertThat; class ListSortTest { + List<Integer> values = IntLists.shuffledRange(1,100); + Sortable <Integer> sortableValues = new SortableIntList<>(values); + Sort <Integer> sorter = new Sort<>(sortableValues); @Test void testSort() { - + sorter.sort(); + assertThat(values).isEqualTo(IntLists.range(1,100)); } } \ No newline at end of file -- GitLab