Pagini recente » Cod sursa (job #2971857) | Cod sursa (job #2812226) | Cod sursa (job #3133762) | Cod sursa (job #1826003) | Cod sursa (job #3003447)
#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;
}