Advertisement
Guest User

Iwanngivethisagoodnamerightnow

a guest
Nov 20th, 2014
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.56 KB | None | 0 0
  1. template <class T>
  2. void mergeSort(vector<T>& set, bool(*compare)(const T&, const T&))
  3. {
  4.         mergeSort(set, 0, set.size() - 1, compare);
  5. }
  6.  
  7.  
  8. template <class T>
  9. void mergeSort(vector<T>& set, int low, int high, bool(*compare)(const T&, const T&))
  10. {
  11.         int mid;
  12.  
  13.         if (low < high)
  14.         {
  15.                 mid = (low + high) / 2;
  16.  
  17.                 //Divide and conquer
  18.  
  19.                 mergeSort(set, low, mid, compare);
  20.                 mergeSort(set, mid + 1, high, compare);
  21.  
  22.                 //Combine
  23.  
  24.                 merge(set, low, mid, high, compare);
  25.         }
  26.  
  27. }
  28.  
  29. template <class T>
  30. void merge(vector<T>& set, int low, int mid, int high, bool(*compare)(const T&, const T&))
  31. {
  32.         vector<T> temp(high - low + 1);
  33.  
  34.         int i = low;
  35.         int j = mid + 1;
  36.         int k = 0;
  37.  
  38.         while (i <= mid && j <= high)
  39.         {
  40.                 if (compare(set[j], set[i]))
  41.                 {
  42.                         temp[k] = set[j];
  43.                         ++j;
  44.                         ++k;
  45.                 }
  46.                 else
  47.                 {
  48.                         temp[k] = set[i];
  49.                         ++i;
  50.                         ++k;
  51.                 }
  52.         }
  53.  
  54.         while (i <= mid)
  55.         {
  56.                 temp[k] = set[i];
  57.                 ++i;
  58.                 ++k;
  59.         }
  60.  
  61.         while (j <= high)
  62.         {
  63.                 temp[k] = set[j];
  64.                 ++j;
  65.                 ++k;
  66.     }
  67.  
  68.         for (i = 0, j = low; j <= high; i++, j++)
  69.                 set[j] = temp[i];
  70.  
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement