From 5c7e3d16382de2fd720bd498edffee301ac4a9c5 Mon Sep 17 00:00:00 2001
From: Haley Glavina <HaleyGlavina@Haleys-MacBook-Pro.local>
Date: Tue, 27 Feb 2018 17:04:37 -0500
Subject: [PATCH] Haley and Lawrence worked on Mergesort

---
 src/sandbox/GeneralCompare.java |  5 ++-
 src/sort/GeneralCompare.java    |  4 +-
 src/sort/MergeSort.java         | 68 ++++++++++++++++++++++-----------
 3 files changed, 50 insertions(+), 27 deletions(-)

diff --git a/src/sandbox/GeneralCompare.java b/src/sandbox/GeneralCompare.java
index 29332aa..9e7584c 100644
--- a/src/sandbox/GeneralCompare.java
+++ b/src/sandbox/GeneralCompare.java
@@ -1,5 +1,6 @@
 package sandbox;
 
-public interface GeneralCompare<T> {
-	public int eval(T a1, T a2);
+public interface GeneralCompare {
+	public int eval(Comparable a1, Comparable a2);
+
 }
diff --git a/src/sort/GeneralCompare.java b/src/sort/GeneralCompare.java
index 76bf31f..b5d51af 100644
--- a/src/sort/GeneralCompare.java
+++ b/src/sort/GeneralCompare.java
@@ -1,5 +1,5 @@
 package sort;
 
-public interface GeneralCompare<T> {
-	public int compare(T a1, T a2);
+public interface GeneralCompare {
+	public int compare(Comparable a1, Comparable a2);
 }
diff --git a/src/sort/MergeSort.java b/src/sort/MergeSort.java
index b3c7db4..591ee8c 100644
--- a/src/sort/MergeSort.java
+++ b/src/sort/MergeSort.java
@@ -1,35 +1,59 @@
 package sort;
 
+import java.lang.reflect.Array;
+
 public class MergeSort{
-	
+
 	private static Comparable[] aux;
 	
-	public static void merge(Comparable[] x, int lo, int hi, GeneralCompare gc){
+	public static void main(String[] args) {
+		GeneralCompare b1;
+		b1 = (a1, a2) -> (Integer) a1 - (Integer) a2;
+		Integer[] test = {3, 4, 2, 1, 5, 7, 9, 10};
+		sort(test, 0, Array.getLength(test) - 1, b1);
 		
-		int n = hi - lo; 
-		aux = new Comparable[n];
+		for (int i = 0 ; i < (Array.getLength(test) - 1) ; i++) {
+			System.out.println(test[i]);
+		}
+	}
 
+	public static void sort(Comparable[] x, int lo, int hi, GeneralCompare gc) {
+		aux = new Comparable[Array.getLength(x)];
+		sortWrapped(x, 0, Array.getLength(x) - 1, gc);
+	}
+	
+	private static void sortWrapped(Comparable[] x, int lo, int hi, GeneralCompare gc) {
+		int n = hi - lo; 
 		if(n <= 1)
 			return;
-		// Recursively merge each half of the array
-		int mid = (n/2) + 1;
-		merge(x, lo, mid, gc);
-		merge(x, mid+1, hi, gc);
-		
+		// Recursively sort each half of the array
+		int mid = lo + (n/2);
+		sortWrapped(x, lo, mid, gc);
+		sortWrapped(x, mid+1, hi, gc);
+		merge(x, lo, hi, gc);
+	}
+
+	private static void merge(Comparable[] x, int lo, int hi, GeneralCompare gc){
+
+		int n = hi - lo;
+		int mid = lo + (n/2);
+
 		// Fill auxiliary array
-		for(int k = 1; k <= n; k++){
+		System.out.println(n);
+		for(int k = lo; k <= hi; k++){
 			aux[k] = x[k];
 		}
-		
-		//
-		while ((mid < hi) | (lo < mid)) {
-			if (compare(aux[lo], aux[mid]))
-				x[lo++] = mid; 
-				
+
+		int i = 0;
+		// Merging two sorted arrays
+		while ((lo <= mid) & (mid <= hi)) {
+			if (gc.compare(aux[lo], aux[mid]) > 0)
+				x[i++] = aux[mid++]; 
+			else
+				x[i++] = aux[lo++];
 		}
-		
-		
-		
+
+		/*
 		// Is this portion sorting the aux array? Check
 		for(int k = 1; k <= n; k++){
 			if(i > j-1)
@@ -40,9 +64,7 @@ public class MergeSort{
 				x[k] = aux[j++]; 
 			else 
 				x[k] = aux[i++];
-		}
-		
-	}
-
+		}*/
 
+	}
 }
-- 
GitLab