Pagini recente » Cod sursa (job #1702372) | Cod sursa (job #2913238) | Cod sursa (job #1837662) | Cod sursa (job #2109533) | Cod sursa (job #2862353)
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
/*
int cmp(const int &a, const int &b) ///sortare descrescatoare
{
return a>b;
}
*/
int Maxim(long v[], long n)
{
long max=v[0];
for(long i=1;i<n;i++)
if(v[i]>max)
max=v[i];
return max;
}
void CountSort(long v[], long n, long div)
{
long output[n],i,frecv[10];
//initializam frecv
for(i=0;i<10;i++)
frecv[i]=0;
//calc frecv cifrelor de pe poz div
for(i=0;i<n;i++)
frecv[(v[i]/div)%10]++;
for(i=1;i<10;i++)
frecv[i]+=frecv[i-1];
for(i=n-1;i>=0;i--)
{
output[frecv[(v[i]/div)%10]-1]=v[i];
frecv[(v[i]/div)%10]--;
}
for(i=0;i<n;i++)
v[i]=output[i];
}
void RadixSort(long v[],long n)
{
long m=Maxim(v,n);
for(long div=1;m/div>0;div*=10)
CountSort(v,n,div);
}
int main()
{
ifstream f("algsort.in");
ofstream g("algsort.out");
long n;
///sortare perechi
/*pair <int,int> v[1000];
f>>n;
for(int i=1;i<=n;i++)
f>>v[i].first>>v[i].second;
sort(v+1,v+n+1);
*/
f>>n;
long v[n];
for(long i=0;i<n;i++)
f>>v[i];
/*for(int i=1;i<=n;i++)
g<<v[i].first<<" "<<v[i].second<<endl;
*/
RadixSort(v,n);
for(long i=0;i<n;i++)
g<<v[i]<<" ";
f.close();
g.close();
return 0;
/* long n, v[500000];
f>>n;
for(int i=1;i<=n;i++)
f>>v[i];
sort(v+1,v+n+1,cmp);
for(int i=1;i<=n;i++)
g<<v[i]<<" ";
f.close();
g.close();
return 0;
*/
}