Mai intai trebuie sa te autentifici.
Cod sursa(job #1026751)
Utilizator | Data | 11 noiembrie 2013 22:17:35 | |
---|---|---|---|
Problema | Sortare prin comparare | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.05 kb |
#include <iostream>
#include <fstream>
using namespace std;
int nr[17];
int maxim(int x[],int n)
{
int i,maxi;
maxi=x[1];
for(i=2;i<=n;i++)
if(x[i]>maxi)
maxi=x[i];
return maxi;
}
int numara(int x[],int n, long long cif)
{
int aux[500005],i;
for(i=0;i<=16;i++)
nr[i]=0;
for(i=1;i<=n;i++)
nr[(x[i]/cif)&15]++;
for(i=1;i<=15;i++)
nr[i]=nr[i]+nr[i-1];
for(i=n;i>=1;i--)
{
aux[nr[(x[i]/cif)&15]]=x[i];
nr[(x[i]/cif)&15]--;
}
for(i=1;i<=n;i++)
x[i]=aux[i];
}
int radixsort(int x[],int n)
{
int m,i;
long long cif;
m=maxim(x,n);
cif=1;
while(m/cif>0)
{
numara(x,n,cif);
cif=cif<<4;
}
}
int main()
{
ifstream f("algsort.in");
ofstream g("algsort.out");
int n, x[500005],i;
f>>n;
for(i=1;i<=n;i++)
f>>x[i];
radixsort(x,n);
for(i=1;i<=n;i++)
g<<x[i]<<" ";
f.close();
g.close();
return 0;
}