diff --git a/Java/MergeSort.java b/Java/MergeSort.java new file mode 100644 index 0000000..4366840 --- /dev/null +++ b/Java/MergeSort.java @@ -0,0 +1,67 @@ +import java.util.Arrays; + +class MergeSort { + private static void merge(int[] arr, int left, int middle, int right) { + int n1 = middle - left + 1; + int n2 = right - middle; + + int[] leftArray = new int[n1]; + int[] rightArray = new int[n2]; + + System.arraycopy(arr, left, leftArray, 0, n1); + for (int j = 0; j < n2; j++) { + rightArray[j] = arr[middle + 1 + j]; + } + + int i = 0, j = 0; + + int k = left; + while (i < n1 && j < n2) { + if (leftArray[i] <= rightArray[j]) { + arr[k] = leftArray[i]; + i++; + } else { + arr[k] = rightArray[j]; + j++; + } + k++; + } + + while (i < n1) { + arr[k] = leftArray[i]; + i++; + k++; + } + + while (j < n2) { + arr[k] = rightArray[j]; + j++; + k++; + } + } + + private static void mergeSort(int[] arr, int left, int right) { + if (left < right) { + int middle = (left + right) / 2; + + mergeSort(arr, left, middle); + mergeSort(arr, middle + 1, right); + + merge(arr, left, middle, right); + } + } + + private static void mergeSort(int[] arr) { + mergeSort(arr, 0, arr.length - 1); + } + + public static void main(String[] args) { + int[] arr = { 1, 5, 0, -8, 2, 1, 0, -2}; + + System.out.println("Unsorted array: " + Arrays.toString(arr)); + + mergeSort(arr); + + System.out.println("Sorted array: " + Arrays.toString(arr)); + } +} \ No newline at end of file diff --git a/README.md b/README.md index 077651f..840dde6 100644 --- a/README.md +++ b/README.md @@ -791,6 +791,7 @@ │   ├── PasswordGenerator.java │   ├── Quick_sort.java │   ├── Radix_sort.java +│   ├── MergeSort.java │   └── fibonacci.java ├── Kotlin Extensions │   └── Overview.txt