diff --git a/CP/mergeSort.cpp b/CP/mergeSort.cpp new file mode 100644 index 0000000..4f6e8f2 --- /dev/null +++ b/CP/mergeSort.cpp @@ -0,0 +1,88 @@ +#include +#include +using namespace std; + +void merge(vector &v, int s, int e) +{ + int mid = s + ((e - s) / 2); + + int len1 = mid - s + 1; + int len2 = e - mid; + int *first = new int[len1]; + int *second = new int[len2]; + + // copy + int k = s; + for (int i = 0; i < len1; i++) + { + first[i] = v[k++]; + } + + k = mid + 1; + for (int i = 0; i < len2; i++) + { + second[i] = v[k++]; + } + + // merge + int index1 = 0; + int index2 = 0; + k = s; + + while (index1 < len1 && index2 < len2) + { + if (first[index1] < second[index2]) + { + v[k++] = first[index1++]; + } + else + { + v[k++] = second[index2++]; + } + } + + while (index1 < len1) + { + v[k++] = first[index1++]; + } + + while (index2 < len2) + { + v[k++] = second[index2++]; + } + + delete[] first; + delete[] second; +} + +void mergeSort(vector &v, int s, int e) +{ + + if (s >= e) + { + return; + } + + int mid = s + ((e - s) / 2); + + mergeSort(v, s, mid); + mergeSort(v, mid + 1, e); + + merge(v, s, e); +} + +int main() +{ + // Your code here + + vector v = {3, 7, 1, 9, 2, 5, 8, 2}; + + mergeSort(v, 0, v.size() - 1); + + for (int i = 0; i < v.size(); i++) + { + cout << v[i] << " "; + } + + return 0; +} \ No newline at end of file diff --git a/README.md b/README.md index 077651f..6764343 100644 --- a/README.md +++ b/README.md @@ -1219,6 +1219,6 @@ └── rust └── factorial.rs -238 directories, 958 files +237 directories, 958 files ``` diff --git a/project_tree_structure.txt b/project_tree_structure.txt index ddf0956..0711c50 100644 --- a/project_tree_structure.txt +++ b/project_tree_structure.txt @@ -1195,4 +1195,4 @@ └── rust └── factorial.rs -238 directories, 958 files +237 directories, 958 files