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..7cdc71953ef2e810b89069ea58b5f5a0251cc7c9 --- /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 afba558e8fcf444fea4841c64bb520f4ac422cce..272ea4c5779983a80a3ae59453e03ed30fabb097 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 0000000000000000000000000000000000000000..f6e292b4b07c665ea247a9367122c100470c221c --- /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 cab24626a255b1f948bdfcb5a7cda2b39b96b3c7..92092bb913e0dd369713eadc961ea236f2376019 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 ffcf935a1cbd10e7664ea0cf1911fab83f43b563..8d43dd6bf6240efbaa82117c6efa991112acaf86 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 0000000000000000000000000000000000000000..f6016a5f26a6a22d4bb7dc04c9e239477f4aabf8 --- /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 921553e59bc69f1b54a25df3977e3c22f8927563..8099c93cdf923038893aee6dbd9963ec8d3d8c4b 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