Pagini recente » Cod sursa (job #2295732) | Cod sursa (job #2929937) | Cod sursa (job #110991) | Cod sursa (job #1789181) | Cod sursa (job #2439007)
#include <iostream>
#include <fstream>
using namespace std;
int max(int vec[], int n){
int max = vec[0];
for(int i = 1; i < n; i++){
if(vec[i] > max){
max = vec[i];
}
}
return max;
}
void countSort(int vec[], int n, int exp){
int count[10] = {0};
int output[n];
for(int i = 0; i < n; i++){
count[(vec[i]/exp)%10]++;
}
for(int i = 1; i < 10; i++){
count[i] += count[i-1];
}
for(int i = n - 1; i >= 0; i--){
output[count[(vec[i]/exp)%10]-1] = vec[i];
count[(vec[i]/exp)%10]--;
}
for(int i = 0; i < n; i++){
vec[i] = output[i];
}
}
void radix(int vec[], int n){
int maxim = max(vec, n);
for(int exp = 1; maxim/exp > 0; exp *= 10){
countSort(vec, n, exp);
}
}
int main(){
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n, vec[500000];
fin >> n;
for(int i = 0; i < n; i++){
fin >> vec[i];
}
radix(vec, n);
for(int i = 0; i < n; i++){
fout << vec[i] <<" ";
}
return 0;
}