Cod sursa(job #2483266)

Utilizator stormy_weatherelena cristina stormy_weather Data 29 octombrie 2019 16:52:18
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include<iostream>
#include<vector>
using namespace std;

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(10, vector<int>());

    int max = a[0];
    for (int i = 1; i < n; i++)
      if (a[i] > max)
        max = a[i];

    int nr_digits = get_nr_digits(max), divide = 1;
    for (int i = 0; i < nr_digits; i++) {
      if (i > 0)
        divide *= 10;
      for (int i = 0; i < n; i++) {
        int digit = (a[i] / divide) % 10;
        bucket[digit].push_back(a[i]);
      }
      a.clear();
      for (int i = 0; i <= 9; 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;
}