diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 5ffbb1a..186ae07 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -14,6 +14,7 @@ diff --git a/module5/src/main/java/com/hithomelabs/princeton1/module5/AbstractCustomSorts.java b/module5/src/main/java/com/hithomelabs/princeton1/module5/AbstractCustomSorts.java index 86bfbbd..1df70bc 100644 --- a/module5/src/main/java/com/hithomelabs/princeton1/module5/AbstractCustomSorts.java +++ b/module5/src/main/java/com/hithomelabs/princeton1/module5/AbstractCustomSorts.java @@ -6,6 +6,9 @@ public abstract class AbstractCustomSorts { // TODO: Implement this method public void exch(E[] arr, int j, int i) { + E temp = arr[j]; + arr[j] = arr[i]; + arr[i] = temp; } // TODO: Implement this method diff --git a/module5/src/main/java/com/hithomelabs/princeton1/module5/Insertion.java b/module5/src/main/java/com/hithomelabs/princeton1/module5/Insertion.java index a4117d4..6fa7efa 100644 --- a/module5/src/main/java/com/hithomelabs/princeton1/module5/Insertion.java +++ b/module5/src/main/java/com/hithomelabs/princeton1/module5/Insertion.java @@ -3,7 +3,29 @@ package com.hithomelabs.princeton1.module5; public class Insertion extends AbstractCustomSorts { @Override public void sort(E[] arr) { + int N = arr.length; + for(int i=0; i0; j--){ + if(less( (Comparable) arr[j], arr[j-1])) + exch(arr, j, j-1); + else + break; + } + } + } + + public void sort(E[] arr, int h) { + int N = arr.length; + + for(int i=0; i0; j=j-h){ + if(less( (Comparable) arr[j], arr[j-1])) + exch(arr, j, j-1); + else + break; + } + } } } diff --git a/module5/src/main/java/com/hithomelabs/princeton1/module5/Selection.java b/module5/src/main/java/com/hithomelabs/princeton1/module5/Selection.java index d483434..6638859 100644 --- a/module5/src/main/java/com/hithomelabs/princeton1/module5/Selection.java +++ b/module5/src/main/java/com/hithomelabs/princeton1/module5/Selection.java @@ -7,7 +7,16 @@ package com.hithomelabs.princeton1.module5; public class Selection extends AbstractCustomSorts{ @Override public void sort(E[] arr) { + int N=arr.length; + for(int i=0; i) arr[j], arr[min])) + min=j; + } + exch(arr, min, i); + } } } diff --git a/module5/src/main/java/com/hithomelabs/princeton1/module5/Shell.java b/module5/src/main/java/com/hithomelabs/princeton1/module5/Shell.java index 620accd..7abc6fd 100644 --- a/module5/src/main/java/com/hithomelabs/princeton1/module5/Shell.java +++ b/module5/src/main/java/com/hithomelabs/princeton1/module5/Shell.java @@ -24,6 +24,10 @@ public class Shell extends AbstractCustomSorts { */ @Override public void sort(E[] arr) { + Insertion sortingAlgorithm = new Insertion<>(); + sortingAlgorithm.sort(arr, 7); + sortingAlgorithm.sort(arr, 3); + sortingAlgorithm.sort(arr); } private int hsort(E[] arr, int h, MetaData metadata) { diff --git a/module5/src/test/java/com/hithomelabs/princeton1/module5/SortTest.java b/module5/src/test/java/com/hithomelabs/princeton1/module5/SortTest.java index 301c6d5..e2aa21d 100644 --- a/module5/src/test/java/com/hithomelabs/princeton1/module5/SortTest.java +++ b/module5/src/test/java/com/hithomelabs/princeton1/module5/SortTest.java @@ -6,51 +6,91 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import com.hithomelabs.princeton1.common.Apple; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.Random; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + class SortTest { - private ArrayList apples; + private Apple[] apples, applesCopy; private AbstractCustomSorts sortingAlgorithm; private Random random; @BeforeEach void setUp() { - apples = new ArrayList(); + apples = new Apple[100]; +// applesCopy = new Apple[100]; //sortingAlgorithm = new Selection(); random = new Random(); } - private void testSort(AbstractCustomSorts sortingAlgorithm) { - for (int i = 0; i < 100; i++) - apples.add(new Apple(random.nextInt(100))); + private void testSort() { + int value; + for (int i = 0; i < 100; i++) { + value = random.nextInt(100); + apples[i] = new Apple(value); +// applesCopy[i] = new Apple(value); + } } + private boolean test(){ + for(int i=0;i<99;i++){ + if(apples[i].compareTo(apples[i+1]) > 0) + return false; + } + return true; + } + @Test @DisplayName("Testing Insertion sort functionality") public void testInsertionSort() { sortingAlgorithm = new Insertion(); - testSort(sortingAlgorithm); + //populates random apples + testSort(); + + //calling sort function + sortingAlgorithm.sort(apples); + + //checking if sorted array has any element which is less than preceeding one + assertTrue(test()); } @Test @DisplayName("Testing Selection sort functionality") public void testSelectionSort() { sortingAlgorithm = new Selection(); - testSort(sortingAlgorithm); + //populates random apples + testSort(); + + //calling sort function + sortingAlgorithm.sort(apples); + + //checking if sorted array has any element which is less than preceeding one + assertTrue(test()); } @Test @DisplayName("Testing Shell sort functionality") public void testShellSort() { - sortingAlgorithm = new Shell<>(); - testSort(sortingAlgorithm); + sortingAlgorithm = new Shell(); + //populates random apples + testSort(); + + //calling sort function + sortingAlgorithm.sort(apples); + + //checking if sorted array has any element which is less than preceeding one + assertTrue(test()); } @AfterEach void tearDown() { sortingAlgorithm = null; apples = null; + applesCopy = null; } } \ No newline at end of file