From 33e318d5168dd5e384790a997c308cddc1e30e15 Mon Sep 17 00:00:00 2001 From: Krutika Date: Mon, 29 Oct 2018 21:23:58 -0400 Subject: [PATCH] Merge Sort Complete Implementation in C++ --- Merge_Sort.cpp | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Merge_Sort.cpp diff --git a/Merge_Sort.cpp b/Merge_Sort.cpp new file mode 100644 index 0000000..6e313ac --- /dev/null +++ b/Merge_Sort.cpp @@ -0,0 +1,51 @@ +#include +#include +using namespace std; + +void merge(vector& a, vector& temp, int leftPos, int rightPos, int rightEnd){ + int leftEnd = rightPos - 1; + int tmpPos = leftPos; + int numElements = rightEnd - leftPos + 1; + + while(leftPos <= leftEnd && rightPos <= rightEnd) + if(a[leftPos] <= a[rightPos]) + temp[tmpPos++] = std::move(a[leftPos++]); + else + temp[tmpPos++] = std::move(a[rightPos++]); + + while(leftPos <= leftEnd) //Copy remaining first half + temp[tmpPos++] = std::move(a[leftPos++]); + + while(rightPos <= rightEnd) ////Copy remaining second half + temp[tmpPos++] = std::move(a[rightPos++]); + + //Copy back temp array + for(int i=0; i& a, vector& temp, int left, int right){ + if(left < right){ + int center = (left + right) / 2; + mergeSort(a, temp, left, center); + mergeSort(a, temp, center+1, right); + merge(a, temp, left, center+1, right); + } +} + +void mergeSort(vector& a){ + int size = a.size(); + vector temp(size); + mergeSort(a, temp, 0, size-1); +} + +int main() +{ + vector v1 = {2,4,1,6,7,36,23}; + mergeSort(v1); + std::cout<<"Sorted array is:\n"; + for(int i=0; i