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'