Advertisement
Mihai_Preda

Untitled

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