In C Write a vector merge sort which is place lug other word
In C++
Write a vector merge sort which is place. lug other words pass parameters so that only one vector is used for the sort.Solution
Answer:
#include <iostream>
#include <vector>
using namespace std;
void display(vector<int> v)
{
for(int i = 0; i < v.size(); i++) cout << v[i] << \" \";
cout << endl;
}
vector<int> merge(vector<int> left_side, vector<int> right_side)
{
vector<int> output;
while ((int)left_side.size() > 0 || (int)right_side.size() > 0) {
if ((int)left_side.size() > 0 && (int)right_side.size() > 0) {
if ((int)left_side.front() <= (int)right_side.front()) {
output.push_back((int)left_side.front());
left_side.erase(left_side.begin());
}
else {
output.push_back((int)right_side.front());
right_side.erase(right_side.begin());
}
} else if ((int)left_side.size() > 0) {
for (int i = 0; i < (int)left_side.size(); i++)
output.push_back(left_side[i]);
break;
} else if ((int)right_side.size() > 0) {
for (int i = 0; i < (int)right_side.size(); i++)
output.push_back(right_side[i]);
break;
}
}
return output;
}
vector<int> mergeSort(vector<int> m)
{
if (m.size() <= 1)
return m;
vector<int> left_side, right_side, output;
int center = ((int)m.size()+ 1) / 2;
for (int i = 0; i < center; i++) {
left_side.push_back(m[i]);
}
for (int i = center; i < (int)m.size(); i++) {
right_side.push_back(m[i]);
}
left_side = mergeSort(left_side);
right_side = mergeSort(right_side);
output = merge(left_side, right_side);
return output;
}
int main()
{
vector<int> v;
v.push_back(38);
v.push_back(27);
v.push_back(43);
display(v);
cout << \"------------------\" << endl;
v = mergeSort(v);
display(v);
}

