From 8aea534065a887d61e2b0b25fc95f3142803aa10 Mon Sep 17 00:00:00 2001 From: Shorya Date: Tue, 3 Oct 2023 11:40:38 +0530 Subject: [PATCH] MergeSort --- Java/MergeSort.java | 80 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 Java/MergeSort.java diff --git a/Java/MergeSort.java b/Java/MergeSort.java new file mode 100644 index 0000000..ebda656 --- /dev/null +++ b/Java/MergeSort.java @@ -0,0 +1,80 @@ +class MergeSort { + + void merge(int arr[], int p, int q, int r) { + + int n1 = q - p + 1; + int n2 = r - q; + + int L[] = new int[n1]; + int M[] = new int[n2]; + + for (int i = 0; i < n1; i++) + L[i] = arr[p + i]; + for (int j = 0; j < n2; j++) + M[j] = arr[q + 1 + j]; + + int i, j, k; + i = 0; + j = 0; + k = p; + + while (i < n1 && j < n2) { + if (L[i] <= M[j]) { + arr[k] = L[i]; + i++; + } else { + arr[k] = M[j]; + j++; + } + k++; + } + + // When we run out of elements in either L or M, + // pick up the remaining elements and put in A[p..r] + while (i < n1) { + arr[k] = L[i]; + i++; + k++; + } + + while (j < n2) { + arr[k] = M[j]; + j++; + k++; + } + } + + // Divide the array into two subarrays, sort them and merge them + void mergeSort(int arr[], int l, int r) { + if (l < r) { + + // m is the point where the array is divided into two subarrays + int m = (l + r) / 2; + + mergeSort(arr, l, m); + mergeSort(arr, m + 1, r); + + // Merge the sorted subarrays + merge(arr, l, m, r); + } + } + + // Print the array + static void printArray(int arr[]) { + int n = arr.length; + for (int i = 0; i < n; ++i) + System.out.print(arr[i] + " "); + System.out.println(); + } + + // Driver program + public static void main(String args[]) { + int arr[] = { 6, 5, 12, 10, 9, 1 }; + + MergeSort ob = new MergeSort(); + ob.mergeSort(arr, 0, arr.length - 1); + + System.out.println("Sorted array:"); + printArray(arr); + } +} \ No newline at end of file