From ef4fc97ba5f803b3c2e53171884590727b0bb897 Mon Sep 17 00:00:00 2001 From: Roshan Mishra Date: Fri, 4 Oct 2019 23:02:49 +0530 Subject: [PATCH] Add merge sort --- mergesort.cpp | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 mergesort.cpp diff --git a/mergesort.cpp b/mergesort.cpp new file mode 100644 index 0000000..7bd9238 --- /dev/null +++ b/mergesort.cpp @@ -0,0 +1,91 @@ +#include +using namespace std; + +// A function to merge the two half into a sorted data. +void Merge(int *a, int low, int high, int mid) +{ + // We have low to mid and mid+1 to high already sorted. + int i, j, k, temp[high-low+1]; + i = low; + k = 0; + j = mid + 1; + + // Merge the two parts into temp[]. + while (i <= mid && j <= high) + { + if (a[i] < a[j]) + { + temp[k] = a[i]; + k++; + i++; + } + else + { + temp[k] = a[j]; + k++; + j++; + } + } + + // Insert all the remaining values from i to mid into temp[]. + while (i <= mid) + { + temp[k] = a[i]; + k++; + i++; + } + + // Insert all the remaining values from j to high into temp[]. + while (j <= high) + { + temp[k] = a[j]; + k++; + j++; + } + + + // Assign sorted data stored in temp[] to a[]. + for (i = low; i <= high; i++) + { + a[i] = temp[i-low]; + } +} + +// A function to split array into two parts. +void MergeSort(int *a, int low, int high) +{ + int mid; + if (low < high) + { + mid=(low+high)/2; + // Split the data into two half. + MergeSort(a, low, mid); + MergeSort(a, mid+1, high); + + // Merge them to get sorted output. + Merge(a, low, high, mid); + } +} + +int main() +{ + int n, i; + cout<<"\nEnter the number of data element to be sorted: "; + cin>>n; + + int arr[n]; + for(i = 0; i < n; i++) + { + cout<<"Enter element "<>arr[i]; + } + + MergeSort(arr, 0, n-1); + + // Printing the sorted data. + cout<<"\nSorted Data "; + for (i = 0; i < n; i++) + cout<<"->"<