Pagini recente » Cod sursa (job #2027958) | Cod sursa (job #1953047) | Cod sursa (job #14181) | Cod sursa (job #2114845) | Cod sursa (job #2531730)
#include <bits/stdc++.h>
using namespace std;
ofstream g("algsort.out");
int p = 31999;
char buffer[32010];
int n;
int v[500000];
int m = -INFINITY;
void inc()
{
++p;
if(p == 32000)
{
fread(buffer,1,32000,stdin);
p = 0;
}
}
void read(int &x)
{
x = 0;
while(buffer[p] < '0' || buffer[p] > '9')
inc();
while(buffer[p] >= '0' && buffer[p] <= '9')
{
x = x * 10 + buffer[p] - '0';
inc();
}
}
void Read()
{
freopen("algsort.in","r",stdin);
read(n);
for(int i = 0;i < n;++i)
{
read(v[i]);
if(v[i] > m)
m = v[i];
}
}
void countSort(int v[],int n,int exp)
{
int output[n];
int i, count[10] = {0};
for(int i = 0;i < n;++i)
count[(v[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[(v[i] / exp) % 10] - 1] = v[i];
count[(v[i] / exp) % 10]--;
}
for(int i = 0;i < n;++i)
v[i] = output[i];
}
void RadixSort(int v[],int n)
{
for(int exp = 1;m/exp > 0;exp *= 10)
countSort(v,n,exp);
}
void Print()
{
for(int i = 0;i < n;++i)
g<<v[i]<<" ";
g.close();
}
int main()
{
Read();
RadixSort(v,n);
Print();
return 0;
}