Pagini recente » Cod sursa (job #911063) | Cod sursa (job #330151) | Cod sursa (job #848056) | Cod sursa (job #391231) | Cod sursa (job #2618069)
#include <iostream>
#include <fstream>
#include<cstdlib>
using namespace std;
ifstream fin ("algsort.in");
ofstream fout ("algsort.out");
int a[500000], ordonat[500000];
int put10[10]={1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};
/*void mergesort( int st, int dr )
{
if(st!=dr)
{
int mij=((st+dr)>>1);
mergesort(st,mij);
mergesort(mij+1,dr);
int k,j,cpst=st;
k=st;
j=mij+1;
while(k<=mij && j<=dr)
if(v[k]<v[j])
a[st++]=v[k++];
else
a[st++]=v[j++];
while(k<=mij)
a[st++]=v[k++];
while(j<=dr)
a[st++]=v[j++];
for(j=cpst;j<=dr;j++)
v[j]=a[j];
}
}
void quick_like_sonic_sort(int v[], int left, int right)
{
if(left<right)
{
int pivot=v[left+rand()%(right-left)];
int e=right, b=left;
while(v[e]<pivot)
e--;
while(v[b]>pivot)
b++;
while(b<e)
{
swap(v[b], v[e]);
do
e--;
while(v[e]<pivot);
do
b++;
while(v[b]>pivot);
}
quick_like_sonic_sort(v, left, e);
quick_like_sonic_sort(v, e+1, right);
}
}*/
void couning_sort(int v[], int right, int exp)
{
int freq[10]={0};
int i;
for(i=0 ; i<=right ; i++)
freq[(v[i]/put10[exp])%10]++;
for(i=1 ; i<10 ; i++)
{
freq[i]+=freq[i-1];
}
for(i=right ; i>=0 ; i--)
{
ordonat[freq[(v[i]/put10[exp])%10]-1]=v[i];
freq[(v[i]/put10[exp])%10]--;
}
for(i=0 ; i<=right ; i++)
v[i]=ordonat[i];
}
int maxx;
void ridiche_sort(int v[], int right)
{
int j;
for(j=0 ; j<10 && put10[j]<=maxx ; j++)
couning_sort(a, right, j);
}
int main()
{
int i,n;
fin >>n;
maxx=0;
for(i=0;i<n;i++)
{
fin >> a[i];
if(maxx<a[i])
maxx=a[i];
}
ridiche_sort(a, n-1);
for(i=0;i<n;i++)
fout << ordonat[i] << " ";
return 0;
}