Advertisement
Ritam_C

MergeSort

Apr 9th, 2021
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.20 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. void printarray(vector<int> v){
  6.     for(int i = 0; i < v.size(); i++){
  7.         cout << v[i] << " ";
  8.     }
  9.     cout << "\n";
  10. }
  11.  
  12. void merge(vector<int>& v, int s1, int e1, int s2, int e2){
  13.     vector<int> p;
  14.     int i1 = s1, i2 = s2;
  15.    
  16.     while(i1 <= e1 && i2 <= e2){
  17.         if(v[i1] > v[i2]){
  18.             p.push_back(v[i2]);
  19.             i2++;
  20.         } else{
  21.             p.push_back(v[i1]);
  22.             i1++;
  23.         }
  24.     }
  25.     for(int i = i1; i <= e1; i++){
  26.         p.push_back(v[i]);
  27.     }
  28.     for(int i = i2; i <= e2; i++){
  29.         p.push_back(v[i]);
  30.     }
  31.    
  32.     for(int i = s1; i <= e2; i++){
  33.         v[i] = p[i-s1];
  34.     }
  35. }
  36.  
  37. void mergesort(vector<int>& v, int s, int e){
  38.     if(e-s > 1){
  39.         mergesort(v, s, s+(e-s)/2);
  40.         mergesort(v, s+(e-s)/2+1, e);
  41.         merge(v, s, s+(e-s)/2, s+(e-s)/2+1, e);
  42.     } else{
  43.         if(v[s] > v[e]){
  44.             swap(v[e], v[s]);
  45.         }
  46.     }
  47. }
  48.  
  49. int main(){
  50.     vector<int> v;
  51.     int n;
  52.     cin >> n;
  53.     while(n--){
  54.         int x;
  55.         cin >> x;
  56.         v.push_back(x);
  57.     }
  58.     mergesort(v, 0, v.size()-1);
  59.     printarray(v);
  60.     return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement