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 380ac31..b9b7002 100644 --- a/module6/src/main/java/com/hithomelabs/princeton1/module6/Merge.java +++ b/module6/src/main/java/com/hithomelabs/princeton1/module6/Merge.java @@ -7,6 +7,34 @@ import java.util.Arrays; public class Merge extends AbstractCustomSorts { @Override public void sort(E[] arr) { + merge_sort(arr, 0, arr.length-1); + } + + private void merge_sort(E[] arr, int low_index, int high_index){ + System.out.println(low_index + " " + high_index); + if(high_index - low_index > 0) { + int mid_index = low_index + (high_index - low_index)/2; + merge_sort(arr, low_index, mid_index); + merge_sort(arr, mid_index + 1, high_index); + + // Copy array + E[] auxArr = (E[]) new Object[arr.length]; + System.arraycopy(arr, 0, auxArr, 0, arr.length); + + // Sort + int low_index_ptr = low_index; + int high_index_ptr = mid_index + 1; + for(int i=low_index; i<= high_index; i++){ + if(low_index_ptr > mid_index) + arr[i] = auxArr[high_index_ptr++]; + else if(high_index_ptr > high_index) + arr[i] = auxArr[low_index_ptr++]; + else if(less((Comparable) auxArr[low_index_ptr], auxArr[high_index_ptr])) + arr[i] = auxArr[low_index_ptr++]; + else + arr[i] = auxArr[high_index_ptr++]; + } + } } }