Cod sursa(job #2483286)

Utilizator stormy_weatherelena cristina stormy_weather Data 29 octombrie 2019 17:24:36
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;

const int bucket_size = 1 << 16;

int get_nr_digits(int x) {
  int nr_digits = 0;
  while (x > 0) {
    nr_digits++;
    x = x / 10;
  }
  return nr_digits;
}

void radix_sort(vector<int> &a) {
  int n = a.size();

  if (n > 1) {
    vector<vector <int>> bucket(bucket_size, vector<int>());
    
    for (int i = 0; i < 2; i++) {
      int divide;
      if (i == 0)
        divide = 0;
      else
        divide = 16;

      for (int i = 0; i < n; i++) {
        int digit = (a[i] >> divide ) & (bucket_size - 1);
        bucket[digit].push_back(a[i]);
      }

      a.clear();
      for (int i = 0; i < bucket_size; i++) {
        a.insert(a.end(), bucket[i].begin(), bucket[i].end());
        bucket[i].clear();
      }
    }
  }
  return;
}

int main() {

  #ifdef INFOARENA
  ifstream cin("algsort.in");
  ofstream cout("algsort.out");
  #endif

  int n; cin >> n;

  vector<int> a(n);
  for (int i = 0; i < n; i++)
    cin >> a[i];

  radix_sort(a);

  for (int i = 0; i < n; i++)
    cout << a[i] << " ";
  cout << "\n";

  return 0;
}