Advertisement
STANAANDREY

merge_sort

Aug 5th, 2019
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.19 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int v[100001];
  5.  
  6. void interclasare (int v[], int st, int dr, int mid)
  7. {
  8.     int i, j, k;
  9.     int nst = mid - st + 1;
  10.     int ndr = dr - mid;
  11.     int vst[nst], vdr[ndr];
  12.  
  13.     for (i = 0; i < nst; i++)
  14.         vst[i] = v[st + i];
  15.     for (j = 0; j < ndr; j++)
  16.         vdr[j] = v[mid + j + 1];
  17.  
  18.     i = 0;
  19.     j = 0;
  20.     k = st;
  21.     while (i < nst && j < ndr)
  22.     {
  23.         if (vst[i] <= vdr[j])
  24.         {
  25.             v[k] = vst[i];
  26.             i++;
  27.         }
  28.         else
  29.         {
  30.             v[k] = vdr[j];
  31.             j++;
  32.         }
  33.         k++;
  34.     }
  35.  
  36.     while (i < nst)
  37.     {
  38.         v[k] = vst[i];
  39.         i++;
  40.         k++;
  41.     }
  42.  
  43.     while (j < ndr)
  44.     {
  45.         v[k] = vdr[j];
  46.         j++;
  47.         k++;
  48.     }
  49. }
  50.  
  51. void sortare(int v[], int st, int dr)
  52. {
  53.     int mid;
  54.     if (st < dr)
  55.     {
  56.         mid = (st + dr)/2;
  57.         sortare(v, st, mid);
  58.         sortare(v, mid + 1, dr);
  59.         interclasare(v, st, dr, mid);
  60.     }
  61. }
  62.  
  63. int main()
  64. {
  65.     int n;
  66.     cin >> n;
  67.     for (int i = 0; i < n; i++)
  68.         cin >> v[i];
  69.     sortare(v, 0, n - 1);
  70.     for (int i = 0; i < n; i++)
  71.         cout << v[i] << ' ';
  72.     return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement