Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- size_t
- merge(vector<int>& v, vector<int>& tempVec, size_t begin, size_t mid, size_t end)
- {
- size_t numCompares = 0;
- size_t split = mid - 1;
- size_t iter = begin;
- // Main loop
- while (begin <= split && mid <= end )
- {
- if (v[begin] <= v[mid])
- {
- tempVec[iter] = v[begin];
- ++begin;
- }
- else
- {
- tempVec[iter] = v[mid];
- ++mid;
- }
- ++iter;
- ++numCompares;
- }
- while (begin <= split) // Copy rest of first half
- {
- tempVec[iter] = v[begin];
- ++iter;
- ++begin;
- }
- while (mid <= end) // Copy rest of right half
- {
- tempVec[iter] = v[mid];
- ++mid;
- ++iter;
- }
- // Copy tmpArray back
- for (int i = 0; i < v.size (); ++i, --end)
- {
- v[end] = tempVec[end];
- }
- printVector (v, 0, v.size ());
- return numCompares;
- }
- size_t
- mergeHelper (vector<int>& v, vector<int>& tempVec, size_t begin, size_t end)
- {
- if (begin < end)
- {
- size_t mid = (begin + end) / 2;
- mergeHelper (v, tempVec, begin, mid);
- mergeHelper (v, tempVec, mid + 1, end);
- return merge (v, tempVec, begin, mid + 1, end);
- }
- }
- size_t
- mergeSort (vector<int>& v)
- {
- vector<int> tempVec (v.size ());
- return mergeHelper (v, tempVec, 0, v.size () - 1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement