diff --git a/day34/C++/mergeSort.cpp b/day34/C++/mergeSort.cpp new file mode 100644 index 00000000..05552903 --- /dev/null +++ b/day34/C++/mergeSort.cpp @@ -0,0 +1,94 @@ +/* +* @author : imkaka +* @date : 5/2/2019 +*/ + +#include +#include + +using namespace std; + +// Merges two subarrays of arr[]. +void merge(vector& arr, int l, int m, int r) +{ + int i, j, k; + int n1 = m - l + 1; + int n2 = r - m; + + //create temp arrays + int L[n1], R[n2]; + + //Copy data to temp arrays L[] and R[] + for (i = 0; i < n1; i++) + L[i] = arr[l + i]; + for (j = 0; j < n2; j++) + R[j] = arr[m + 1+ j]; + + // Merge the temp arrays back + i = 0; // Initial index of first subarray + j = 0; // Initial index of second subarray + k = l; // Initial index of merged subarray + 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[] + while (i < n1) + { + arr[k] = L[i]; + i++; + k++; + } + + //Copy the remaining elements of R[] + 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); + } +} + +void print(const vector& arr){ + for(const int x : arr){ + cout << x << " "; + } + + cout << endl; +} +int main(){ + vector arr = {12, 34, 1, -5, 10, 43, 23, 100, 100000, 0}; + + cout << "Before Sorting : "; + print(arr); + + mergeSort(arr, 0, arr.size()-1); + + cout << endl << "After Sorting : "; + print(arr); + return 0; +} diff --git a/day34/README.md b/day34/README.md index 390306c5..319b371f 100644 --- a/day34/README.md +++ b/day34/README.md @@ -25,4 +25,103 @@ output: [1, 2, 3, 4, 5, 6, 7, 8, 9] ```js to be added -``` \ No newline at end of file +``` + +### [C++ Implementation](./C++/mergeSort.cpp) + +```cpp +/* +* @author : imkaka +* @date : 5/2/2019 +*/ + +#include +#include + +using namespace std; + +// Merges two subarrays of arr[]. +void merge(vector& arr, int l, int m, int r) +{ + int i, j, k; + int n1 = m - l + 1; + int n2 = r - m; + + //create temp arrays + int L[n1], R[n2]; + + //Copy data to temp arrays L[] and R[] + for (i = 0; i < n1; i++) + L[i] = arr[l + i]; + for (j = 0; j < n2; j++) + R[j] = arr[m + 1+ j]; + + // Merge the temp arrays back + i = 0; // Initial index of first subarray + j = 0; // Initial index of second subarray + k = l; // Initial index of merged subarray + 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[] + while (i < n1) + { + arr[k] = L[i]; + i++; + k++; + } + + //Copy the remaining elements of R[] + 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); + } +} + +void print(const vector& arr){ + for(const int x : arr){ + cout << x << " "; + } + + cout << endl; +} +int main(){ + vector arr = {12, 34, 1, -5, 10, 43, 23, 100, 100000, 0}; + + cout << "Before Sorting : "; + print(arr); + + mergeSort(arr, 0, arr.size()-1); + + cout << endl << "After Sorting : "; + print(arr); + return 0; +} +```