Cod sursa(job #3003447)

Utilizator AndreiKatsukiAndrei Dogarel AndreiKatsuki Data 15 martie 2023 18:56:02
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");

int a[500005];

void countSort(int a[], int n, int power, int exp){
    int BASE = (1 << power);
    map<int, int> mp;
    for(int i = 1; i <= n; ++i){
        mp[(a[i] >> exp) & (BASE - 1)]++;
    }
    for(int i = 1; i < BASE; ++i){
        mp[i] += mp[i - 1];
    }
    int* res = new int[500005];
    for(int i = n; i >= 1; --i){
        res[mp[(a[i] >> exp) & (BASE - 1)]] = a[i];
        mp[(a[i] >> exp) & (BASE - 1)]--;
    }
    for(int i = 1; i <= n; ++i){
        a[i] = res[i + 1];
    }
    if(res != NULL){
        delete[] res;
        res = NULL;
    }
}

void radixSortBit(int a[], int n, int power){
    for(int exp = 0; exp < 32; exp += power){
        countSort(a, n, power, exp);
    }
}

int main(){
    int n;
    f >> n;
    for(int i = 1; i <= n; ++i){
        f >> a[i];
    }
    radixSortBit(a, n, 16);
    for(int i = 1; i <= n; ++i){
        g << a[i] << " ";
    }
    return 0;
}