From 5560be8262fbe152dd095c0149b153f21b3f28c4 Mon Sep 17 00:00:00 2001 From: nik Date: Mon, 9 Apr 2018 13:41:39 +0300 Subject: [PATCH] MergeSort was implemented SortAlgorithm --- Sorts/{ => src/sort}/MergeSort.java | 73 ++++++++++++++++------------- Sorts/src/sort/QuickSort.java | 3 ++ 2 files changed, 43 insertions(+), 33 deletions(-) rename Sorts/{ => src/sort}/MergeSort.java (53%) diff --git a/Sorts/MergeSort.java b/Sorts/src/sort/MergeSort.java similarity index 53% rename from Sorts/MergeSort.java rename to Sorts/src/sort/MergeSort.java index b53451af8..4f294dc7d 100644 --- a/Sorts/MergeSort.java +++ b/Sorts/src/sort/MergeSort.java @@ -1,13 +1,37 @@ +package sort; + +import static sort.SortUtils.print; + /** + * This method implements the Generic Merge Sort + * * * @author Varun Upadhyay (https://github.com/varunu28) + * @author Podshivalov Nikita (https://github.com/nikitap492) + * + * + * @see SortAlgorithm * */ -class MergeSort { +class MergeSort implements SortAlgorithm { + /** * This method implements the Generic Merge Sort + * @param unsorted the array which should be sorted + * @param Comparable class + * @return sorted array + */ + @Override + @SuppressWarnings("unchecked") + public > T[] sort(T[] unsorted) { + T[] tmp = (T[]) new Comparable[unsorted.length]; + doSort(unsorted, tmp, 0, unsorted.length - 1); + return unsorted; + } + + /** * * @param arr The array to be sorted * @param temp The copy of the actual array @@ -15,12 +39,11 @@ class MergeSort { * @param right The last index of the array * Recursively sorts the array in increasing order **/ - - public static > void MS(T[] arr, T[] temp, int left, int right) { + private static > void doSort(T[] arr, T[] temp, int left, int right) { if (left < right) { int mid = left + (right - left) / 2; - MS(arr, temp, left, mid); - MS(arr, temp,mid + 1, right); + doSort(arr, temp, left, mid); + doSort(arr, temp,mid + 1, right); merge(arr, temp, left, mid, right); } @@ -37,16 +60,15 @@ class MergeSort { * merges two parts of an array in increasing order **/ - public static > void merge(T[] arr, T[] temp, int left, int mid, int right) { - for (int i=left;i<=right;i++) { - temp[i] = arr[i]; - } + private static > void merge(T[] arr, T[] temp, int left, int mid, int right) { + System.arraycopy(arr, left, temp, left, right - left + 1); + int i= left; int j = mid + 1; int k = left; - while (i<=mid && j<=right) { + while (i <= mid && j <= right) { if (temp[i].compareTo(temp[j]) <= 0) { arr[k] = temp[i]; i++; @@ -69,32 +91,17 @@ class MergeSort { public static void main(String[] args) { // Integer Input - int[] arr = {4,23,6,78,1,54,231,9,12}; - Integer[] array = new Integer[arr.length]; - for (int i=0;i 1 4 6 9 12 23 54 78 231 - for (int i=0;i a b c d e - for(int i=0; i