Skip to content
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 91 additions & 0 deletions Solved-Problems/Mergesort.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
#include <bits/stdc++.h>

Check notice on line 1 in Solved-Problems/Mergesort.cpp

View workflow job for this annotation

GitHub Actions / c-cpp-linter / c-cpp-linter

Run clang-format on Solved-Problems/Mergesort.cpp

File Solved-Problems/Mergesort.cpp does not conform to Custom style guidelines. (lines 7, 8, 9, 10, 11, 13, 14, 16, 17, 18, 19, 20, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44, 45, 47, 48, 49, 50, 51, 52, 58, 59, 60, 61, 63, 64, 65, 70, 71, 72, 73, 78, 79, 80, 81, 83, 84, 86, 88, 89)
using namespace std;

// Merges two subarrays of arr[].
// First subarray is arr[left..mid]
// Second subarray is arr[mid+1..right]
void merge(vector<int>& arr, int left,
int mid, int right)
{
int n1 = mid - left + 1;
int n2 = right - mid;

// Create temp vectors
vector<int> 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<int>& 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<int>& arr)
{
for (int i = 0; i < arr.size(); i++)
cout << arr[i] << " ";
cout << endl;
}

// Driver code
int main()
{
vector<int> 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;
}
Loading