Cod sursa(job #2642684)

Utilizator lucametehauDart Monkey lucametehau Data 16 august 2020 18:57:15
Problema Sortare prin comparare Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb

#include <fstream>
#include <vector>

using namespace std;

ifstream cin ("algsort.in");
ofstream cout ("algsort.out");

const int B = 20;
const int LIM = 2147483647;

int n;

int v[500005];
vector <int> nr[B + 1];

int getPow(int b, int lim) {
  int cnt = 0, p = 1;
  while(p <= lim / b)
    cnt++, p *= b;
  return cnt;
}

int main() {
  cin >> n;
  for(int i = 1; i <= n; i++)
    cin >> v[i];
  int p = 1, lim = getPow(B, LIM);
  for(int j = 0; j < lim; j++) {
    for(int i = 1; i <= n; i++)
      nr[(v[i] / p) % B].push_back(v[i]);
    int m = 0;
    for(int i = 0; i < B; i++) {
      for(auto &j : nr[i])
        v[++m] = j;
      nr[i].clear();
    }
    p *= B;
  }
  for(int i = 1; i <= n; i++)
    cout << v[i] << " ";
  return 0;
}