From 90f8b14ee5168dabf959789c8826175a2dc61e66 Mon Sep 17 00:00:00 2001 From: hitanshu310 Date: Tue, 4 Feb 2025 02:15:31 +0530 Subject: [PATCH 1/4] Mode commonly used objects to a new module common, added dependencies and test dependencies for other modules on common, added Merge sort, client and tests --- .idea/gradle.xml | 2 + clients/build.gradle | 3 ++ .../clients/module5/InsertionClient.java | 4 +- .../clients/module5/ShellClient.java | 2 +- .../clients/module6/MergeClient.java | 23 ++++++++++ common/build.gradle | 24 ++++++++++ .../hithomelabs/princeton1/common}/Apple.java | 2 +- .../princeton1/common}/Orange.java | 2 +- module5/build.gradle | 1 + .../hithomelabs/princeton1/module5/Shell.java | 2 +- .../princeton1/module5/SortTest.java | 11 +---- module6/build.gradle | 25 ++++++++++ .../hithomelabs/princeton1/module6/Merge.java | 46 +++++++++++++++++++ .../princeton1/module6/MergeTest.java | 44 ++++++++++++++++++ settings.gradle | 4 +- 15 files changed, 179 insertions(+), 16 deletions(-) create mode 100644 clients/src/main/java/com/hithomelabs/clients/module6/MergeClient.java create mode 100644 common/build.gradle rename {module5/src/main/java/com/hithomelabs/princeton1/module5 => common/src/main/java/com/hithomelabs/princeton1/common}/Apple.java (94%) rename {module5/src/main/java/com/hithomelabs/princeton1/module5 => common/src/main/java/com/hithomelabs/princeton1/common}/Orange.java (82%) create mode 100644 module6/build.gradle create mode 100644 module6/src/main/java/com/hithomelabs/princeton1/module6/Merge.java create mode 100644 module6/src/test/java/com/hithomelabs/princeton1/module6/MergeTest.java diff --git a/.idea/gradle.xml b/.idea/gradle.xml index b463382..c8d9cd4 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -9,8 +9,10 @@ diff --git a/clients/build.gradle b/clients/build.gradle index 7ba5603..49c6430 100644 --- a/clients/build.gradle +++ b/clients/build.gradle @@ -14,6 +14,9 @@ dependencies { testImplementation 'org.junit.jupiter:junit-jupiter' implementation project(':module4') implementation project(':module5') + implementation project(':module6') + implementation project(':common') + testImplementation project(':common') } java { toolchain { diff --git a/clients/src/main/java/com/hithomelabs/clients/module5/InsertionClient.java b/clients/src/main/java/com/hithomelabs/clients/module5/InsertionClient.java index c0d75c7..c77209f 100644 --- a/clients/src/main/java/com/hithomelabs/clients/module5/InsertionClient.java +++ b/clients/src/main/java/com/hithomelabs/clients/module5/InsertionClient.java @@ -1,8 +1,8 @@ package com.hithomelabs.clients.module5; import com.hithomelabs.princeton1.module5.Insertion; -import com.hithomelabs.princeton1.module5.Apple; -import com.hithomelabs.princeton1.module5.Orange; +import com.hithomelabs.princeton1.common.Apple; +import com.hithomelabs.princeton1.common.Orange; public class InsertionClient { diff --git a/clients/src/main/java/com/hithomelabs/clients/module5/ShellClient.java b/clients/src/main/java/com/hithomelabs/clients/module5/ShellClient.java index 504eede..765748e 100644 --- a/clients/src/main/java/com/hithomelabs/clients/module5/ShellClient.java +++ b/clients/src/main/java/com/hithomelabs/clients/module5/ShellClient.java @@ -1,6 +1,6 @@ package com.hithomelabs.clients.module5; -import com.hithomelabs.princeton1.module5.Apple; +import com.hithomelabs.princeton1.common.Apple; import com.hithomelabs.princeton1.module5.Shell; import java.util.Arrays; diff --git a/clients/src/main/java/com/hithomelabs/clients/module6/MergeClient.java b/clients/src/main/java/com/hithomelabs/clients/module6/MergeClient.java new file mode 100644 index 0000000..9b2b122 --- /dev/null +++ b/clients/src/main/java/com/hithomelabs/clients/module6/MergeClient.java @@ -0,0 +1,23 @@ +package com.hithomelabs.clients.module6; + +import com.hithomelabs.princeton1.common.Apple; +import com.hithomelabs.princeton1.module6.Merge; + +import java.util.Random; + +public class MergeClient { + + + public static void main(String[] args) { + int size = 100; + Apple[] apples = new Apple[size]; + Merge merge = new Merge(); + + for (int i = 0; i < apples.length; i++) { + apples[i] = new Apple(new Random().nextInt(1000)); + } + merge.sort(apples); + for (int i = 0; i < apples.length; i++) + System.out.println(apples[i]); + } +} diff --git a/common/build.gradle b/common/build.gradle new file mode 100644 index 0000000..6db7aa8 --- /dev/null +++ b/common/build.gradle @@ -0,0 +1,24 @@ +plugins { + id 'java' +} + +group = 'com.hithomelabs.princeton1.common' +version = 'unspecified' + +repositories { + mavenCentral() +} + +dependencies { + testImplementation platform('org.junit:junit-bom:5.10.0') + testImplementation 'org.junit.jupiter:junit-jupiter' +} + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(11) + } +} +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/module5/src/main/java/com/hithomelabs/princeton1/module5/Apple.java b/common/src/main/java/com/hithomelabs/princeton1/common/Apple.java similarity index 94% rename from module5/src/main/java/com/hithomelabs/princeton1/module5/Apple.java rename to common/src/main/java/com/hithomelabs/princeton1/common/Apple.java index 131b5bb..04edf46 100644 --- a/module5/src/main/java/com/hithomelabs/princeton1/module5/Apple.java +++ b/common/src/main/java/com/hithomelabs/princeton1/common/Apple.java @@ -1,4 +1,4 @@ -package com.hithomelabs.princeton1.module5; +package com.hithomelabs.princeton1.common; import java.util.Objects; diff --git a/module5/src/main/java/com/hithomelabs/princeton1/module5/Orange.java b/common/src/main/java/com/hithomelabs/princeton1/common/Orange.java similarity index 82% rename from module5/src/main/java/com/hithomelabs/princeton1/module5/Orange.java rename to common/src/main/java/com/hithomelabs/princeton1/common/Orange.java index 02db021..455457d 100644 --- a/module5/src/main/java/com/hithomelabs/princeton1/module5/Orange.java +++ b/common/src/main/java/com/hithomelabs/princeton1/common/Orange.java @@ -1,4 +1,4 @@ -package com.hithomelabs.princeton1.module5; +package com.hithomelabs.princeton1.common; public class Orange { private int size; diff --git a/module5/build.gradle b/module5/build.gradle index 6b1dd5d..eb7a351 100644 --- a/module5/build.gradle +++ b/module5/build.gradle @@ -12,6 +12,7 @@ repositories { dependencies { testImplementation platform('org.junit:junit-bom:5.10.0') testImplementation 'org.junit.jupiter:junit-jupiter' + testImplementation project(':common') } java { toolchain { 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 97a08ff..d253056 100644 --- a/module5/src/main/java/com/hithomelabs/princeton1/module5/Shell.java +++ b/module5/src/main/java/com/hithomelabs/princeton1/module5/Shell.java @@ -53,7 +53,7 @@ public class Shell extends AbstractCustomSorts { return h; } /* - ! sample implementation of insertion sort as h-sort of h = 1 + * Sample implementation of insertion sort as h-sort of h = 1 * Will just be comparing the number of saps taken across both implementations */ public void insertionSort(E[] arr){ 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 d0b2e4a..301c6d5 100644 --- a/module5/src/test/java/com/hithomelabs/princeton1/module5/SortTest.java +++ b/module5/src/test/java/com/hithomelabs/princeton1/module5/SortTest.java @@ -4,12 +4,10 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; 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.Random; -import static org.junit.jupiter.api.Assertions.*; - class SortTest { private ArrayList apples; @@ -26,11 +24,7 @@ class SortTest { private void testSort(AbstractCustomSorts sortingAlgorithm) { for (int i = 0; i < 100; i++) apples.add(new Apple(random.nextInt(100))); - Apple[] arr = apples.toArray(new Apple[apples.size()]); - apples.sort(null); - Apple[] sorted = apples.toArray(new Apple[apples.size()]); - sortingAlgorithm.sort(arr); - assertArrayEquals(sorted, arr); + } @Test @@ -54,7 +48,6 @@ class SortTest { testSort(sortingAlgorithm); } - @AfterEach void tearDown() { sortingAlgorithm = null; diff --git a/module6/build.gradle b/module6/build.gradle new file mode 100644 index 0000000..1b6bbef --- /dev/null +++ b/module6/build.gradle @@ -0,0 +1,25 @@ +plugins { + id 'java' +} + +group = 'com.hithomelabs.princeton1.module6' +version = 'unspecified' + +repositories { + mavenCentral() +} + +dependencies { + testImplementation platform('org.junit:junit-bom:5.10.0') + testImplementation 'org.junit.jupiter:junit-jupiter' + implementation project(':module5') + testImplementation project(':common') +} +java { + toolchain { + languageVersion = JavaLanguageVersion.of(11) + } +} +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/module6/src/main/java/com/hithomelabs/princeton1/module6/Merge.java b/module6/src/main/java/com/hithomelabs/princeton1/module6/Merge.java new file mode 100644 index 0000000..5cffa56 --- /dev/null +++ b/module6/src/main/java/com/hithomelabs/princeton1/module6/Merge.java @@ -0,0 +1,46 @@ +package com.hithomelabs.princeton1.module6; + +import com.hithomelabs.princeton1.module5.AbstractCustomSorts; + +import java.util.Arrays; + +public class Merge extends AbstractCustomSorts { + @Override + public void sort(E[] arr) { + + int N = arr.length; + // * * aux is a helper array required for merge + E[] aux = Arrays.copyOf(arr, N); + mergesort(arr, aux, 0, N-1); + + } + + private void mergesort(E[] arr, E[] aux, int lo, int hi) { + + if (hi <= lo) return; + int mid = lo + (hi - lo)/2; + mergesort(arr, aux, lo, mid); + mergesort(arr, aux, mid+1, hi); + merge(arr, aux, lo, mid, hi); + + } + + private void merge(E[] arr, E[] aux, int lo, int mid, int hi) { + + // * * creating backup of original array + for (int i = lo; i <= hi; i++) + aux[i] = arr[i]; + + int i = lo; + int j = mid+1; + for (int k = lo; k <= hi; k++){ + // * If i has already reached mid, no need to compare we insert at pointer k + if(i > mid) arr[k] = aux[j++]; + else if(j > hi) arr[k] = aux[i++]; + else if(less((Comparable) aux[i], aux[j])) arr[k] = aux[i++]; + else arr[k] = aux[j++]; + } + } +} + + diff --git a/module6/src/test/java/com/hithomelabs/princeton1/module6/MergeTest.java b/module6/src/test/java/com/hithomelabs/princeton1/module6/MergeTest.java new file mode 100644 index 0000000..abf0bd5 --- /dev/null +++ b/module6/src/test/java/com/hithomelabs/princeton1/module6/MergeTest.java @@ -0,0 +1,44 @@ +package com.hithomelabs.princeton1.module6; + +import com.hithomelabs.princeton1.module5.AbstractCustomSorts; +import com.hithomelabs.princeton1.common.Apple; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.Random; + +import static org.junit.jupiter.api.Assertions.*; + +class MergeTest { + + private AbstractCustomSorts sortingAlgorithm; + private ArrayList apples; + private Random random; + + @BeforeEach + void setUp() { + apples = new ArrayList<>(); + random = new Random(); + } + + @Test + @DisplayName("Merge Sort test client") + public void testSort(){ + sortingAlgorithm = new Merge(); + for(int i = 0; i < 10; i++) + apples.add(new Apple(random.nextInt(100))); + Apple[] arr = apples.toArray(new Apple[apples.size()]); + apples.sort(null); + Apple[] sorted = apples.toArray(new Apple[apples.size()]); + sortingAlgorithm.sort(arr); + assertArrayEquals(sorted, arr); + } + + @AfterEach + void tearDown() { + sortingAlgorithm = null; + } +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index f786f9b..cd86a6c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -11,7 +11,9 @@ plugins { } rootProject.name = 'Pricenton1' -include('module4') +include 'module4' include 'clients' include 'module5' +include 'module6' +include 'common' -- 2.45.2 From c710f4de7a9263023631e65d43e3e93ba240f43f Mon Sep 17 00:00:00 2001 From: hitanshu310 Date: Tue, 4 Feb 2025 02:28:31 +0530 Subject: [PATCH 2/4] Adding merge sort practice code --- .../hithomelabs/princeton1/module6/Merge.java | 33 ------------------- 1 file changed, 33 deletions(-) diff --git a/module6/src/main/java/com/hithomelabs/princeton1/module6/Merge.java b/module6/src/main/java/com/hithomelabs/princeton1/module6/Merge.java index 5cffa56..380ac31 100644 --- a/module6/src/main/java/com/hithomelabs/princeton1/module6/Merge.java +++ b/module6/src/main/java/com/hithomelabs/princeton1/module6/Merge.java @@ -7,39 +7,6 @@ import java.util.Arrays; public class Merge extends AbstractCustomSorts { @Override public void sort(E[] arr) { - - int N = arr.length; - // * * aux is a helper array required for merge - E[] aux = Arrays.copyOf(arr, N); - mergesort(arr, aux, 0, N-1); - - } - - private void mergesort(E[] arr, E[] aux, int lo, int hi) { - - if (hi <= lo) return; - int mid = lo + (hi - lo)/2; - mergesort(arr, aux, lo, mid); - mergesort(arr, aux, mid+1, hi); - merge(arr, aux, lo, mid, hi); - - } - - private void merge(E[] arr, E[] aux, int lo, int mid, int hi) { - - // * * creating backup of original array - for (int i = lo; i <= hi; i++) - aux[i] = arr[i]; - - int i = lo; - int j = mid+1; - for (int k = lo; k <= hi; k++){ - // * If i has already reached mid, no need to compare we insert at pointer k - if(i > mid) arr[k] = aux[j++]; - else if(j > hi) arr[k] = aux[i++]; - else if(less((Comparable) aux[i], aux[j])) arr[k] = aux[i++]; - else arr[k] = aux[j++]; - } } } -- 2.45.2 From 6a752c9dc21ea908da94e42444ce20033abeaac4 Mon Sep 17 00:00:00 2001 From: hitanshu310 Date: Sat, 8 Feb 2025 01:57:32 +0530 Subject: [PATCH 3/4] Adding quick sort --- .idea/gradle.xml | 1 + {Module2 => Slides/Module2}/15UnionFind.pdf | Bin .../Module3}/14AnalysisOfAlgorithms.pdf | Bin .../Module4}/13StacksAndQueues.pdf | Bin .../Module5}/21ElementarySorts.pdf | Bin {Module6 => Slides/Module6}/22Mergesort.pdf | Bin {Module7 => Slides/Module7}/23Quicksort.pdf | Bin .../Module8}/24PriorityQueues.pdf | Bin .../Module9}/31ElementarySymbolTables.pdf | Bin .../Module9}/32BinarySearchTrees.pdf | Bin clients/build.gradle | 1 + .../clients/module7/QuickSortClient.java | 22 +++++++ module7/build.gradle | 21 +++++++ .../hithomelabs/princeton1/module7/Quick.java | 54 +++++++++++++++++ .../princeton1/module7/QuickTest.java | 56 ++++++++++++++++++ settings.gradle | 1 + 16 files changed, 156 insertions(+) rename {Module2 => Slides/Module2}/15UnionFind.pdf (100%) rename {Module3 => Slides/Module3}/14AnalysisOfAlgorithms.pdf (100%) rename {Module4 => Slides/Module4}/13StacksAndQueues.pdf (100%) rename {Module5 => Slides/Module5}/21ElementarySorts.pdf (100%) rename {Module6 => Slides/Module6}/22Mergesort.pdf (100%) rename {Module7 => Slides/Module7}/23Quicksort.pdf (100%) rename {Module8 => Slides/Module8}/24PriorityQueues.pdf (100%) rename {Module9 => Slides/Module9}/31ElementarySymbolTables.pdf (100%) rename {Module9 => Slides/Module9}/32BinarySearchTrees.pdf (100%) create mode 100644 clients/src/main/java/com/hithomelabs/clients/module7/QuickSortClient.java create mode 100644 module7/build.gradle create mode 100644 module7/src/main/java/com/hithomelabs/princeton1/module7/Quick.java create mode 100644 module7/src/test/java/com/hithomelabs/princeton1/module7/QuickTest.java diff --git a/.idea/gradle.xml b/.idea/gradle.xml index c8d9cd4..5ffbb1a 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -13,6 +13,7 @@ diff --git a/Module2/15UnionFind.pdf b/Slides/Module2/15UnionFind.pdf similarity index 100% rename from Module2/15UnionFind.pdf rename to Slides/Module2/15UnionFind.pdf diff --git a/Module3/14AnalysisOfAlgorithms.pdf b/Slides/Module3/14AnalysisOfAlgorithms.pdf similarity index 100% rename from Module3/14AnalysisOfAlgorithms.pdf rename to Slides/Module3/14AnalysisOfAlgorithms.pdf diff --git a/Module4/13StacksAndQueues.pdf b/Slides/Module4/13StacksAndQueues.pdf similarity index 100% rename from Module4/13StacksAndQueues.pdf rename to Slides/Module4/13StacksAndQueues.pdf diff --git a/Module5/21ElementarySorts.pdf b/Slides/Module5/21ElementarySorts.pdf similarity index 100% rename from Module5/21ElementarySorts.pdf rename to Slides/Module5/21ElementarySorts.pdf diff --git a/Module6/22Mergesort.pdf b/Slides/Module6/22Mergesort.pdf similarity index 100% rename from Module6/22Mergesort.pdf rename to Slides/Module6/22Mergesort.pdf diff --git a/Module7/23Quicksort.pdf b/Slides/Module7/23Quicksort.pdf similarity index 100% rename from Module7/23Quicksort.pdf rename to Slides/Module7/23Quicksort.pdf diff --git a/Module8/24PriorityQueues.pdf b/Slides/Module8/24PriorityQueues.pdf similarity index 100% rename from Module8/24PriorityQueues.pdf rename to Slides/Module8/24PriorityQueues.pdf diff --git a/Module9/31ElementarySymbolTables.pdf b/Slides/Module9/31ElementarySymbolTables.pdf similarity index 100% rename from Module9/31ElementarySymbolTables.pdf rename to Slides/Module9/31ElementarySymbolTables.pdf diff --git a/Module9/32BinarySearchTrees.pdf b/Slides/Module9/32BinarySearchTrees.pdf similarity index 100% rename from Module9/32BinarySearchTrees.pdf rename to Slides/Module9/32BinarySearchTrees.pdf diff --git a/clients/build.gradle b/clients/build.gradle index 49c6430..d80e4c6 100644 --- a/clients/build.gradle +++ b/clients/build.gradle @@ -15,6 +15,7 @@ dependencies { implementation project(':module4') implementation project(':module5') implementation project(':module6') + implementation project(':module7') implementation project(':common') testImplementation project(':common') } diff --git a/clients/src/main/java/com/hithomelabs/clients/module7/QuickSortClient.java b/clients/src/main/java/com/hithomelabs/clients/module7/QuickSortClient.java new file mode 100644 index 0000000..2717419 --- /dev/null +++ b/clients/src/main/java/com/hithomelabs/clients/module7/QuickSortClient.java @@ -0,0 +1,22 @@ +package com.hithomelabs.clients.module7; + +import com.hithomelabs.princeton1.common.Apple; +import com.hithomelabs.princeton1.module7.Quick; + +import java.util.Random; + +public class QuickSortClient { + + public static void main(String[] args) { + int size = 100; + Apple[] apples = new Apple[size]; + Quick quick = new Quick(); + + for (int i = 0; i < apples.length; i++) { + apples[i] = new Apple(new Random().nextInt(1000)); + } + quick.sort(apples); + for (int i = 0; i < apples.length; i++) + System.out.println(apples[i]); + } +} diff --git a/module7/build.gradle b/module7/build.gradle new file mode 100644 index 0000000..921ffaa --- /dev/null +++ b/module7/build.gradle @@ -0,0 +1,21 @@ +plugins { + id 'java' +} + +group = 'com.hithomelabs.princeton1.module7' +version = 'unspecified' + +repositories { + mavenCentral() +} + +dependencies { + testImplementation platform('org.junit:junit-bom:5.10.0') + testImplementation 'org.junit.jupiter:junit-jupiter' + implementation project(':module5') + testImplementation project(':common') +} + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/module7/src/main/java/com/hithomelabs/princeton1/module7/Quick.java b/module7/src/main/java/com/hithomelabs/princeton1/module7/Quick.java new file mode 100644 index 0000000..c3e4c40 --- /dev/null +++ b/module7/src/main/java/com/hithomelabs/princeton1/module7/Quick.java @@ -0,0 +1,54 @@ +package com.hithomelabs.princeton1.module7; + +import com.hithomelabs.princeton1.module5.AbstractCustomSorts; + + +public class Quick extends AbstractCustomSorts { + @Override + public void sort(E[] arr) { + int N = arr.length; + quickSort(arr, 0, N - 1); + } + + public void altSort(E[] arr) { + int N = arr.length; + altQuickSort(arr, 0, N-1); + } + + private void altQuickSort(E[] arr, int lo, int hi) { + if (lo >= hi) return; + int i = lo + 1; + int j = i; + while(j <= hi){ + if(less((Comparable) arr[j], arr[lo])){ + exch(arr, i, j); + i++; + } + j++; + } + exch(arr, i-1, lo); + altQuickSort(arr, lo, i-2); + altQuickSort(arr, i, hi); + } + + private void quickSort(E[] arr, int lo, int hi) { + + if (lo >= hi) return; + int i = lo; + int j = hi+1; + while(true){ + while(less((Comparable) arr[++i], arr[lo])){ + if(i == hi) break; + } + while(!less((Comparable) arr[--j], arr[lo])){ + if (j == lo ) break; + } + if(j<=i) break; + exch(arr, i , j); + } + exch(arr, j, lo); + quickSort(arr, lo, j-1); + quickSort(arr, j+1, hi); + + } +} diff --git a/module7/src/test/java/com/hithomelabs/princeton1/module7/QuickTest.java b/module7/src/test/java/com/hithomelabs/princeton1/module7/QuickTest.java new file mode 100644 index 0000000..e252c68 --- /dev/null +++ b/module7/src/test/java/com/hithomelabs/princeton1/module7/QuickTest.java @@ -0,0 +1,56 @@ +package com.hithomelabs.princeton1.module7; + +import com.hithomelabs.princeton1.common.Apple; +import org.junit.jupiter.api.*; + +import java.util.ArrayList; +import java.util.Random; +import static org.junit.jupiter.api.Assertions.*; + +class QuickTest { + + private Quick quick; + private ArrayList apples; + private Random random; + + @BeforeEach + void setUp() { + quick = new Quick(); + apples = new ArrayList(); + random = new Random(); + } + + @Test + @DisplayName("testing Quick sort default implementation") + public void testSort(){ + + for(int i = 0; i < 100; i++) + apples.add(new Apple(random.nextInt(1000))); + Apple[] arr = apples.toArray(new Apple[apples.size()]); + quick.sort(arr); + apples.sort(null); + Apple[] sorted = apples.toArray(new Apple[apples.size()]); + Assertions.assertArrayEquals(sorted, arr); + } + + @Test + @DisplayName("testing Quick sort default implementation") + public void testAltSort(){ + + for(int i = 0; i < 100; i++) + apples.add(new Apple(random.nextInt(1000))); + Apple[] arr = apples.toArray(new Apple[apples.size()]); + quick.altSort(arr); + apples.sort(null); + Apple[] sorted = apples.toArray(new Apple[apples.size()]); + Assertions.assertArrayEquals(sorted, arr); + } + + + @AfterEach + void tearDown() { + quick = null; + apples = null; + random = null; + } +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index cd86a6c..f9e40b6 100644 --- a/settings.gradle +++ b/settings.gradle @@ -16,4 +16,5 @@ include 'clients' include 'module5' include 'module6' include 'common' +include 'module7' -- 2.45.2 From 2902cf5c6176fb48fd4a857a1380763104cd0bc8 Mon Sep 17 00:00:00 2001 From: hitanshu310 Date: Sat, 8 Feb 2025 02:11:58 +0530 Subject: [PATCH 4/4] added practice stubs for quick sort --- .../hithomelabs/princeton1/module7/Quick.java | 43 ------------------- .../princeton1/module7/QuickTest.java | 4 ++ 2 files changed, 4 insertions(+), 43 deletions(-) diff --git a/module7/src/main/java/com/hithomelabs/princeton1/module7/Quick.java b/module7/src/main/java/com/hithomelabs/princeton1/module7/Quick.java index c3e4c40..1483c7e 100644 --- a/module7/src/main/java/com/hithomelabs/princeton1/module7/Quick.java +++ b/module7/src/main/java/com/hithomelabs/princeton1/module7/Quick.java @@ -6,49 +6,6 @@ import com.hithomelabs.princeton1.module5.AbstractCustomSorts; public class Quick extends AbstractCustomSorts { @Override public void sort(E[] arr) { - int N = arr.length; - quickSort(arr, 0, N - 1); - } - - public void altSort(E[] arr) { - int N = arr.length; - altQuickSort(arr, 0, N-1); - } - - private void altQuickSort(E[] arr, int lo, int hi) { - if (lo >= hi) return; - int i = lo + 1; - int j = i; - while(j <= hi){ - if(less((Comparable) arr[j], arr[lo])){ - exch(arr, i, j); - i++; - } - j++; - } - exch(arr, i-1, lo); - altQuickSort(arr, lo, i-2); - altQuickSort(arr, i, hi); - } - - private void quickSort(E[] arr, int lo, int hi) { - - if (lo >= hi) return; - int i = lo; - int j = hi+1; - while(true){ - while(less((Comparable) arr[++i], arr[lo])){ - if(i == hi) break; - } - while(!less((Comparable) arr[--j], arr[lo])){ - if (j == lo ) break; - } - if(j<=i) break; - exch(arr, i , j); - } - exch(arr, j, lo); - quickSort(arr, lo, j-1); - quickSort(arr, j+1, hi); } } diff --git a/module7/src/test/java/com/hithomelabs/princeton1/module7/QuickTest.java b/module7/src/test/java/com/hithomelabs/princeton1/module7/QuickTest.java index e252c68..3ff75b9 100644 --- a/module7/src/test/java/com/hithomelabs/princeton1/module7/QuickTest.java +++ b/module7/src/test/java/com/hithomelabs/princeton1/module7/QuickTest.java @@ -33,6 +33,8 @@ class QuickTest { Assertions.assertArrayEquals(sorted, arr); } + // * * Optional test for alternate sort implmentation + /* @Test @DisplayName("testing Quick sort default implementation") public void testAltSort(){ @@ -45,6 +47,8 @@ class QuickTest { Apple[] sorted = apples.toArray(new Apple[apples.size()]); Assertions.assertArrayEquals(sorted, arr); } + */ + @AfterEach -- 2.45.2