Cod sursa(job #2556468)

Utilizator DimaTCDima Trubca DimaTC Data 24 februarie 2020 21:56:56
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include<bits/stdc++.h>
#define N 500030
#define int long long
using namespace std;

int a[N], n;

void countSort(int x) {
    vector<int> cnt[10];

    for (int i=0; i<n; i++) {
        int idx = (a[i]/x)%10;
        cnt[idx].push_back(a[i]);
    }

    int k=0;
    for (int i=0; i<10; i++) {
        for (auto it:cnt[i]) {
            a[k++]=it;
        }
    }
}

void radixSort(int n, int a[N]) {
    int mx=a[0];
    for (int i=1; i<n; i++) if (a[i]>mx) mx=a[i];

    for (int x=1; mx/x; x*=10) {
        countSort(x);
    }
}

int32_t main() {
    ifstream cin("algsort.in");
    ofstream cout("algsort.out");
    cin>>n;
    for (int i=0; i<n; i++) cin>>a[i];

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

    return 0;
}