Commit 09db1b5c authored by Neeraj Kerkar's avatar Neeraj Kerkar

changed implementation to merge sort

parent bbf91dfe
...@@ -2,22 +2,63 @@ ...@@ -2,22 +2,63 @@
using namespace std; using namespace std;
vector<int> sort_custom(vector<int> a) vector<int> merge(const vector<int>& left, const vector<int>& right)
{ {
bool swapp = true; // Fill the resultant vector with sorted results from both vectors
while(swapp) vector<int> result;
unsigned left_it = 0, right_it = 0;
while(left_it < left.size() && right_it < right.size())
{ {
swapp = false; // If the left value is smaller than the right it goes next
for (int i = 0; i < a.size()-1; i++) // into the resultant vector
if(left[left_it] < right[right_it])
{ {
if (a[i]>a[i+1] ) result.push_back(left[left_it]);
left_it++;
}
else
{ {
a[i] += a[i+1]; result.push_back(right[right_it]);
a[i+1] = a[i] - a[i+1]; right_it++;
a[i] -=a[i+1]; }
swapp = true;
} }
// Push the remaining data from both vectors onto the resultant
while(left_it < left.size())
{
result.push_back(left[left_it]);
left_it++;
} }
while(right_it < right.size())
{
result.push_back(right[right_it]);
right_it++;
}
return result;
}
vector<int> sort_custom(vector<int> vec)
{
// Termination condition: List is completely sorted if it
// only contains a single element.
if(vec.size() == 1)
{
return vec;
} }
return a;
// Determine the location of the middle element in the vector
std::vector<int>::iterator middle = vec.begin() + (vec.size() / 2);
vector<int> left(vec.begin(), middle);
vector<int> right(middle, vec.end());
// Perform a merge sort on the two smaller vectors
left = sort_custom(left);
right = sort_custom(right);
return merge(left, right);
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment