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'