#include <iostream>
#include <vector>
using namespace std;
void mergeSort(vector<int> &vec, int left, int right);
void merge(vector<int> &vec, int left, int mid, int right);
void printVec(vector<int> vec);
int main(){
vector<int> test_vec = {11,9,3,20,56,32};
printVec(test_vec);
mergeSort(test_vec, 0, test_vec.size() - 1);
printVec(test_vec);
system("pause");
return 0;
}
void mergeSort(vector<int> &vec, int left, int right){
if (left >= right){
return;
}
int mid = left + ((right - left) >> 1);
mergeSort(vec, left, mid);
mergeSort(vec, mid + 1, right);
merge(vec, left, mid, right);
}
void merge(vector<int> &vec, int left, int mid, int right){
int n = right - left + 1;
vector<int> helper(n, 0);
int i = 0;
int p1 = left;
int p2 = mid + 1;
while (p1 <= mid && p2 <= right){
helper[i++] = vec[p2] < vec[p1] ? vec[p2++] : vec[p1++];
}
while (p1 <= mid){
helper[i++] = vec[p1++];
}
while (p2 <= right){
helper[i++] = vec[p2++];
}
for (int j = 0; j < n; j++){
vec[left + j] = helper[j];
}
}
void printVec(vector<int> vec){
for (auto c : vec){
cout << c << " ";
}
cout << endl;
}