Advertisement
Guest User

ex marge sort

a guest
Mar 31st, 2020
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.45 KB | None | 0 0
  1. void insertion_sort(double* array, int l, int r)
  2. {
  3.     for (int i = l; i <= r; i++)
  4.     {
  5.         double tmp = array[i];
  6.         int j = i;
  7.         while ((j >= 1) && (array[j - 1] > tmp))
  8.         {
  9.           array[j] = array[j - 1];
  10.              j--;
  11.         }
  12.         array[j] = tmp;
  13.     }
  14. }
  15. void merge(double* arr, double* temp, int l, int m, int r)
  16. {
  17.     int i = l;
  18.     int j = m + 1;
  19.     int k = l;
  20.     while ((i <= m) && (j <= r))
  21.     {
  22.         if (arr[i] < arr[j])
  23.         {
  24.             temp[k] = arr[i];
  25.             i++;
  26.         }
  27.         else
  28.         {
  29.             temp[k] = arr[j];
  30.             j++;
  31.         }
  32.         k++;
  33.     }
  34.         for (; j <= r; j++, k++)
  35.             temp[k] = arr[j];
  36.         for (; i <= m; i++, k++)
  37.             temp[k] = arr[i];
  38.         for (i = l; i <= r; i++)
  39.             arr[i] = temp[i];
  40. }
  41. void mergesort(double* arr, double* temp, int l, int r, int threshold)
  42. {
  43.     if (l < r)
  44.     {
  45.         if ((r - l) <= threshold)
  46.             insertion_sort(arr, l, r);
  47.         else
  48.         {
  49.             int m = (l + r) / 2;
  50.             mergesort(arr, temp, l, m, threshold);
  51.             mergesort(arr, temp, m + 1, r, threshold);
  52.             merge(arr, temp, l, m, r);
  53.         }
  54.     }
  55. }
  56. int main()
  57. {
  58.     double array[100];
  59.     for(int i = 0;i<100;i++)
  60.         array[i] = rand() % 100 +1;
  61.     double * temp = new double[100];
  62.     mergesort(array,temp, 0, 99,10);
  63.     delete[] temp;
  64.     return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement