nrk009

Merge_Sort

Jul 27th, 2020
1,429
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.96 KB | None | 0 0
  1. /*
  2.     Was it all worth it ??
  3.     In the end all it remains are just memories!!!
  4.    
  5. */
  6.  
  7. #include<bits/stdc++.h>
  8. using namespace std;
  9.  
  10. #define fast ios_base::sync_with_stdio(0);cin.tie(NULL);cout.tie(NULL)
  11. #define ll long long
  12. #define ld long double
  13. #define pb push_back
  14. #define fe first
  15. #define se second
  16. #define nl "\n"
  17. #define pp pair < ll , ll >
  18. #define sz(x) (ll)x.size()
  19. #define st(x) sort(x.begin(),x.end())
  20. #define rst(x) sort(x.rbegin(), x.rend())
  21. #define all(x) x.begin(),x.end()
  22. long double pi = 3.14159265358979323;
  23.  
  24. const double EPS = 1e-12;
  25. const int N = 1e6 + 5;
  26. //Just A Gentle Reminder about MOD
  27. const int mod = 1e9 + 7;
  28. void print(ll n , ll arr[]){
  29.  
  30.     for(int i = 1 ; i <= n ; i++ ){
  31.         cout << arr[i] << " ";
  32.     }
  33. }
  34.  
  35. void merge(ll n , ll arr[] , ll l , ll mid , ll r){
  36.         vector < ll > lt , rt;
  37.         for(int i = l ; i <= mid ; i++ ){
  38.             lt.pb(arr[i]);
  39.         }      
  40.  
  41.         for(int i = mid + 1 ; i <= r ; i++ ){
  42.             rt.pb(arr[i]);
  43.         }
  44.  
  45.         int i = 0 , j = 0 , k = l;
  46.         while(i < sz(lt) && j < sz(rt)){
  47.  
  48.                 if(lt[i] <= rt[j]){
  49.                     arr[k] = lt[i];
  50.                     i++;
  51.                 }
  52.                 else{
  53.                     arr[k] = rt[j];
  54.                     j++;
  55.                 }
  56.                 k++;
  57.         }
  58.  
  59.         while(i < sz(lt)){
  60.             arr[k] = lt[i];
  61.             i++ , k++;
  62.         }
  63.  
  64.         while(j < sz(rt)){
  65.             arr[k] = rt[j];
  66.             j++ , k++;
  67.         }
  68. }
  69.  
  70. void merge_sort(ll n , ll arr[] , ll l , ll r){
  71.  
  72.         if(l == r)return ;
  73.         ll mid = (l + r)/2;
  74.         merge_sort(n,arr ,l , mid);
  75.         merge_sort(n,arr ,mid + 1 ,r);
  76.         merge(n,arr, l,mid , r);
  77. }
  78.  
  79.  
  80. int main()
  81. {
  82.     fast;
  83.     ll n;
  84.     cin >> n ;
  85.     ll arr[n+1];
  86.     for(int i = 1 ; i <= n ;i++ ){
  87.               cin >> arr[i];
  88.     }
  89.     merge_sort(n,arr ,1,n);
  90.     cout << "merge_sort\n";
  91.     print(n,arr);
  92.     //Time - Complexity - O(nlogn)
  93.     //Best - O(nlogn) - when array is already sorted
  94.     //Worst - O(nlogn) when array is reverse sorted
  95.     //Space Complexity - O(n)
  96.     //O(n) extra space is needed
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.    
  118.     return 0;
  119. //It's not end it yet
  120. }
Advertisement
Add Comment
Please, Sign In to add comment