From ba5531b6e41dda44ae8ca6af4eddceb3469b2029 Mon Sep 17 00:00:00 2001 From: Utkarsh Sharma <76514306+Utkarsh750@users.noreply.github.com> Date: Wed, 25 Oct 2023 17:48:24 +0530 Subject: [PATCH] Create Merge Sort Merge Sort issue #404 --- Merge Sort | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 Merge Sort diff --git a/Merge Sort b/Merge Sort new file mode 100644 index 00000000..f9cf9463 --- /dev/null +++ b/Merge Sort @@ -0,0 +1,88 @@ +#include +#include + +using namespace std; + +void merge(vector& arr, int l, int m, int r) { + int n1 = m - l + 1; + int n2 = r - m; + + // Create temporary arrays + vector L(n1); + vector R(n2); + + // Copy data to temporary arrays L[] and R[] + for (int i = 0; i < n1; i++) { + L[i] = arr[l + i]; + } + for (int i = 0; i < n2; i++) { + R[i] = arr[m + 1 + i]; + } + + // Merge the temporary arrays back into arr[l..r] + int i = 0; + int j = 0; + int k = l; + + while (i < n1 && j < n2) { + if (L[i] <= R[j]) { + arr[k] = L[i]; + i++; + } else { + arr[k] = R[j]; + j++; + } + k++; + } + + // Copy the remaining elements of L[], if there are any + while (i < n1) { + arr[k] = L[i]; + i++; + k++; + } + + // Copy the remaining elements of R[], if there are any + while (j < n2) { + arr[k] = R[j]; + j++; + k++; + } +} + + +void mergeSort(vector& arr, int l, int r) { + if (l < r) { + + int m = l + (r - l) / 2; + + + mergeSort(arr, l, m); + mergeSort(arr, m + 1, r); + + + merge(arr, l, m, r); + } +} + +int main() { + vector arr = {12, 11, 13, 5, 6, 7}; + + cout << "Original array: "; + for (int num : arr) { + cout << num << " "; + } + cout << endl; + + int arr_size = arr.size(); + + mergeSort(arr, 0, arr_size - 1); + + cout << "Sorted array: "; + for (int num : arr) { + cout << num << " "; + } + cout << endl; + + return 0; +}