Advertisement
Guest User

msd_sort

a guest
Feb 26th, 2020
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.21 KB | None | 0 0
  1. #include<iostream>
  2. #include<vector>
  3. #include<queue>
  4.  
  5. using namespace std;
  6.  
  7. void msd_sort(vector<int>& v, int l, int r, int s)
  8. {
  9.     if (l >= r || s < 0)
  10.     {
  11.         return;
  12.     }
  13.     queue<int> q0, q1;
  14.     vector<int> cnt(2);
  15.     vector<int> tmp(v.size());
  16.     for (int i(l); i < r; i++)
  17.     {
  18.         if ((v[i] >> s) & 1)
  19.         {
  20.             q1.push(v[i]);
  21.             cnt[1]++;
  22.         }
  23.         else
  24.         {
  25.             q0.push(v[i]);
  26.             cnt[0]++;
  27.         }
  28.     }
  29.     int i = l;
  30.     while (!q0.empty()) {
  31.         tmp[i] = q0.front();
  32.         q0.pop(), i++, cnt[0];
  33.     }
  34.     while (!q1.empty()) {
  35.         tmp[i] = q1.front();
  36.         q1.pop(), i++, cnt[1];
  37.     }
  38.     for (int i(l); i < r; i++)
  39.     {
  40.         v[i] = tmp[i];
  41.     }
  42.     msd_sort(v, l, l + cnt[0], s - 1);
  43.     msd_sort(v, l + cnt[0], r, s - 1);
  44. }
  45.  
  46. int main() {
  47.     vector<int> v;
  48.     int x = 0;
  49.     while (cin.peek() != '\n' && cin >> x) {
  50.         v.push_back(x);
  51.     }
  52.  
  53.     msd_sort(v, 0, v.size(), 31);
  54.     //cout
  55.     for (int i = 0; i < v.size(); i++) {
  56.         if (v[i] < 0) cout << v[i] << " ";
  57.     }
  58.     for (int i = 0; i < v.size(); i++) {
  59.         if (v[i] >= 0) cout << v[i] << " ";
  60.     }
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement