Pagini recente » Cod sursa (job #1382873) | Cod sursa (job #1400003) | Cod sursa (job #638228) | Cod sursa (job #1563877) | Cod sursa (job #1318222)
#include <fstream>
#include <math.h>
using namespace std;
void radixSort(int a[], int N, int currentDigit);
int main()
{
int N;
ifstream f("algsort.in");
f >> N;
int a[N];
int maxDigits = 0, digits, i;
for (i = 0; i < N; i++)
{
f >> a[i];
digits = log10(a[i]) + 1;
if (digits > maxDigits)
maxDigits = digits;
}
f.close();
for (i = 1; i <= maxDigits; i++)
radixSort(a, N, i);
ofstream g("algsort.out");
for (i = 0; i < N; i++)
g << a[i] << " ";
g.close();
return 0;
}
void radixSort(int a[], int N, int currentDigit)
{
int i, j;
int count[10] = {};
int output[N];
int zeroes = 1;
for (i = 1; i < currentDigit; i++)
zeroes *= 10;
for (i = 0; i < N; i++)
count[(a[i] / zeroes) % 10]++;
for (j = 1; j <= 9; j++)
count[j] += count[j - 1];
int digit;
for (i = N - 1; i >= 0; i--)
{
digit = (a[i] / zeroes) % 10;
output[count[digit] - 1] = a[i];
count[digit]--;
}
for (i = 0; i < N; i++)
a[i] = output[i];
}