From 0d279b5655affc4c67ce698ce68a1fbcda260bc8 Mon Sep 17 00:00:00 2001 From: Pranay <112006221+pranaydeep1@users.noreply.github.com> Date: Thu, 31 Oct 2024 19:10:20 +0530 Subject: [PATCH 1/3] Create Mergesort.cpp Added MergeSort Algorithm --- Solved-Problems/Mergesort.cpp | 91 +++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 Solved-Problems/Mergesort.cpp diff --git a/Solved-Problems/Mergesort.cpp b/Solved-Problems/Mergesort.cpp new file mode 100644 index 0000000..39e86c5 --- /dev/null +++ b/Solved-Problems/Mergesort.cpp @@ -0,0 +1,91 @@ +#include +using namespace std; + +// Merges two subarrays of arr[]. +// First subarray is arr[left..mid] +// Second subarray is arr[mid+1..right] +void merge(vector& arr, int left, + int mid, int right) +{ + int n1 = mid - left + 1; + int n2 = right - mid; + + // Create temp vectors + vector L(n1), R(n2); + + // Copy data to temp vectors L[] and R[] + for (int i = 0; i < n1; i++) + L[i] = arr[left + i]; + for (int j = 0; j < n2; j++) + R[j] = arr[mid + 1 + j]; + + int i = 0, j = 0; + int k = left; + + // Merge the temp vectors back + // into arr[left..right] + 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++; + } +} + +// begin is for left index and end is right index +// of the sub-array of arr to be sorted +void mergeSort(vector& arr, int left, int right) +{ + if (left >= right) + return; + + int mid = left + (right - left) / 2; + mergeSort(arr, left, mid); + mergeSort(arr, mid + 1, right); + merge(arr, left, mid, right); +} + +// Function to print a vector +void printVector(vector& arr) +{ + for (int i = 0; i < arr.size(); i++) + cout << arr[i] << " "; + cout << endl; +} + +// Driver code +int main() +{ + vector arr = { 12, 11, 13, 5, 6, 7 }; + int n = arr.size(); + + cout << "Given vector is \n"; + printVector(arr); + + mergeSort(arr, 0, n - 1); + + cout << "\nSorted vector is \n"; + printVector(arr); + return 0; +} From 0934c78fbacbe765e9e70539c86f064b36f5981a Mon Sep 17 00:00:00 2001 From: Pranay <112006221+pranaydeep1@users.noreply.github.com> Date: Thu, 31 Oct 2024 20:57:01 +0530 Subject: [PATCH 2/3] Delete Solved-Problems/Mergesort.cpp --- Solved-Problems/Mergesort.cpp | 91 ----------------------------------- 1 file changed, 91 deletions(-) delete mode 100644 Solved-Problems/Mergesort.cpp diff --git a/Solved-Problems/Mergesort.cpp b/Solved-Problems/Mergesort.cpp deleted file mode 100644 index 39e86c5..0000000 --- a/Solved-Problems/Mergesort.cpp +++ /dev/null @@ -1,91 +0,0 @@ -#include -using namespace std; - -// Merges two subarrays of arr[]. -// First subarray is arr[left..mid] -// Second subarray is arr[mid+1..right] -void merge(vector& arr, int left, - int mid, int right) -{ - int n1 = mid - left + 1; - int n2 = right - mid; - - // Create temp vectors - vector L(n1), R(n2); - - // Copy data to temp vectors L[] and R[] - for (int i = 0; i < n1; i++) - L[i] = arr[left + i]; - for (int j = 0; j < n2; j++) - R[j] = arr[mid + 1 + j]; - - int i = 0, j = 0; - int k = left; - - // Merge the temp vectors back - // into arr[left..right] - 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++; - } -} - -// begin is for left index and end is right index -// of the sub-array of arr to be sorted -void mergeSort(vector& arr, int left, int right) -{ - if (left >= right) - return; - - int mid = left + (right - left) / 2; - mergeSort(arr, left, mid); - mergeSort(arr, mid + 1, right); - merge(arr, left, mid, right); -} - -// Function to print a vector -void printVector(vector& arr) -{ - for (int i = 0; i < arr.size(); i++) - cout << arr[i] << " "; - cout << endl; -} - -// Driver code -int main() -{ - vector arr = { 12, 11, 13, 5, 6, 7 }; - int n = arr.size(); - - cout << "Given vector is \n"; - printVector(arr); - - mergeSort(arr, 0, n - 1); - - cout << "\nSorted vector is \n"; - printVector(arr); - return 0; -} From cd30f14dc0c42088616ae03b69e70546a213473d Mon Sep 17 00:00:00 2001 From: Pranay <112006221+pranaydeep1@users.noreply.github.com> Date: Thu, 31 Oct 2024 20:58:24 +0530 Subject: [PATCH 3/3] Create mergesort.cpp Modified Mergesort by adding specific folder --- Solved-Problems/Merge-Sort/mergesort.cpp | 91 ++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 Solved-Problems/Merge-Sort/mergesort.cpp diff --git a/Solved-Problems/Merge-Sort/mergesort.cpp b/Solved-Problems/Merge-Sort/mergesort.cpp new file mode 100644 index 0000000..39e86c5 --- /dev/null +++ b/Solved-Problems/Merge-Sort/mergesort.cpp @@ -0,0 +1,91 @@ +#include +using namespace std; + +// Merges two subarrays of arr[]. +// First subarray is arr[left..mid] +// Second subarray is arr[mid+1..right] +void merge(vector& arr, int left, + int mid, int right) +{ + int n1 = mid - left + 1; + int n2 = right - mid; + + // Create temp vectors + vector L(n1), R(n2); + + // Copy data to temp vectors L[] and R[] + for (int i = 0; i < n1; i++) + L[i] = arr[left + i]; + for (int j = 0; j < n2; j++) + R[j] = arr[mid + 1 + j]; + + int i = 0, j = 0; + int k = left; + + // Merge the temp vectors back + // into arr[left..right] + 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++; + } +} + +// begin is for left index and end is right index +// of the sub-array of arr to be sorted +void mergeSort(vector& arr, int left, int right) +{ + if (left >= right) + return; + + int mid = left + (right - left) / 2; + mergeSort(arr, left, mid); + mergeSort(arr, mid + 1, right); + merge(arr, left, mid, right); +} + +// Function to print a vector +void printVector(vector& arr) +{ + for (int i = 0; i < arr.size(); i++) + cout << arr[i] << " "; + cout << endl; +} + +// Driver code +int main() +{ + vector arr = { 12, 11, 13, 5, 6, 7 }; + int n = arr.size(); + + cout << "Given vector is \n"; + printVector(arr); + + mergeSort(arr, 0, n - 1); + + cout << "\nSorted vector is \n"; + printVector(arr); + return 0; +}