Pagini recente » Cod sursa (job #2451857) | Cod sursa (job #2452398) | Cod sursa (job #2476864) | Cod sursa (job #903852) | Cod sursa (job #2451168)
#include<fstream>
using namespace std;
int v[500001], output[500001], n;
int getMax()
{
int mx = v[0];
for (int i = 1; i < n; i++)
if (v[i] > mx)
mx = v[i];
return mx;
}
void cntSort(int exp)
{
int i, cnt[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
for (i = 0; i < n; i++)
cnt[ (v[i]/exp)%10 ]++;
for (i = 1; i < 10; i++)
cnt[i] += cnt[i - 1];
for (i = n - 1; i >= 0; i--)
{
output[cnt[ (v[i]/exp)%10 ] - 1] = v[i];
cnt[ (v[i]/exp)%10 ]--;
}
for (i = 0; i < n; i++)
v[i] = output[i];
}
void radixsort()
{
int m = getMax();
for (int exp = 1; m/exp > 0; exp *= 10)
cntSort(exp);
}
int main()
{
ifstream fin("algsort.in");
ofstream fout("algsort.out");
fin >> n;
for(int i = 0; i < n; i++) fin >> v[i];
radixsort();
for(int i = 0; i < n; i++) fout << v[i] << " ";
return 0;
}