nrk009

Merge_Sort

Oct 15th, 2019
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.62 KB | None | 0 0
  1.  
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4.  
  5. #define fast ios_base::sync_with_stdio(0);cin.tie(NULL);cout.tie(NULL)
  6. #define ll long long
  7. #define ld long double
  8. #define pb push_back
  9. #define fe first
  10. #define se second
  11. #define nl "\n"
  12. #define pp pair < ll , ll >
  13. #define sz(x) (ll)x.size()
  14. #define st(x) sort(x.begin(),x.end())
  15. #define rst(x) sort(x.rbegin(), x.rend())
  16. #define all(x) x.begin(),x.end()
  17. long double pi = 3.14159265358979323;
  18.  
  19. const double EPS = 1e-12;
  20. const int N = 1e6 + 5;
  21. const int mod = 1e9 + 7;
  22.  
  23. ll arr[N];
  24. ll n;
  25.  
  26.  
  27. void merge(ll l ,ll mid , ll r){
  28.         int n1 = mid - l + 1;
  29.         int n2 = r - mid;
  30.         int temp1[n1], temp2[n2];
  31.         int l1 = l , m = mid , r1  = r ;
  32.         for(int i = 0 ; i < n1 ; i++ ){
  33.             temp1[i] = arr[l1];
  34.             l1++;
  35.         }
  36.         m++;
  37.         for(int i = 0 ; i < n2 ; i++ ){
  38.             temp2[i] = arr[m];
  39.             m++;
  40.         }
  41.  
  42.         int i = 0 , j = 0 , k = l;
  43.         while(i < n1 && j < n2){
  44.  
  45.             if(temp1[i] <= temp2[j]){
  46.                 arr[k] = temp1[i];
  47.                 i++;
  48.             }
  49.             else{
  50.                 arr[k] = temp2[j];
  51.                 j++;
  52.             }
  53.             k++;
  54.         }
  55.  
  56.         while(i < n1){
  57.             arr[k] = temp1[i];
  58.             i++ , k++;
  59.         }
  60.  
  61.         while(j < n2){
  62.             arr[k] = temp2[j];
  63.             j++ , k++;
  64.         }
  65.  
  66. }
  67.  
  68. void merge_sort(ll l , ll r){
  69.     if(l == r){
  70.         return;
  71.     }
  72.     ll mid = (l + r)/2;
  73.     merge_sort(l,mid);
  74.     merge_sort(mid + 1 , r);
  75.     merge(l , mid , r);
  76. }
  77.  
  78. void Print(){
  79.     for(int i = 1 ;i <= n ; i++ ){
  80.         cout << arr[i] << " ";
  81.     }
  82.     cout << "\n";
  83. }
  84. int main()
  85. {
  86.     fast;
  87.     cin >> n ;
  88.     for(int i = 1 ; i <= n ; i++ ){
  89.         cin >> arr[i];
  90.     }
  91.     merge_sort(1,n);
  92.     Print();
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.    
  114.     return 0;
  115.    
  116. }
Add Comment
Please, Sign In to add comment