Advertisement
Guest User

Merge Sort

a guest
Dec 10th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.38 KB | None | 0 0
  1. size_t
  2. merge(vector<int>& v, vector<int>& tempVec, size_t begin, size_t mid, size_t end)
  3. {
  4.     size_t numCompares = 0;
  5.     size_t split = mid - 1;
  6.     size_t iter = begin;
  7.  
  8.     // Main loop
  9.     while (begin <= split && mid <= end )
  10.     {    
  11.         if (v[begin] <= v[mid])
  12.         {
  13.             tempVec[iter] = v[begin];
  14.             ++begin;
  15.         }
  16.         else
  17.         {
  18.             tempVec[iter] = v[mid];
  19.             ++mid;
  20.         }
  21.         ++iter;
  22.         ++numCompares;
  23.     }
  24.     while (begin <= split) // Copy rest of first half
  25.     {    
  26.         tempVec[iter] = v[begin];
  27.         ++iter;
  28.         ++begin;
  29.     }
  30.     while (mid <= end) // Copy rest of right half
  31.     {
  32.         tempVec[iter] = v[mid];
  33.         ++mid;
  34.         ++iter;
  35.     }
  36.     // Copy tmpArray back
  37.     for (int i = 0; i < v.size (); ++i, --end)
  38.     {
  39.         v[end] = tempVec[end];
  40.     }
  41.     printVector (v, 0, v.size ());
  42.     return numCompares;
  43. }
  44.  
  45. size_t
  46. mergeHelper (vector<int>& v, vector<int>& tempVec, size_t begin, size_t end)
  47. {
  48.    
  49.   if (begin < end)
  50.   {
  51.     size_t mid = (begin + end) / 2;
  52.     mergeHelper (v, tempVec, begin, mid);
  53.     mergeHelper (v, tempVec, mid + 1, end);
  54.     return merge (v, tempVec, begin, mid + 1, end);
  55.   }
  56. }
  57.  
  58. size_t
  59. mergeSort (vector<int>& v)
  60. {
  61.     vector<int> tempVec (v.size ());
  62.     return mergeHelper (v, tempVec, 0, v.size () - 1);
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement