Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<fstream>
- #include<string.h>
- using namespace std;
- ifstream fin("radixsort.in");
- ofstream fout("radixsort.out");
- int maxi,n,m,a[1000001],b[10],c[1000001];
- int nrcifre(int x)
- {
- if(x==0) return 0;
- int nr=0;
- while(x)
- {
- nr++;
- x/=10;
- }
- return nr;
- }
- void atribuire(int a[], int c[])
- {
- for(int i=1;i<=n;i++) a[i]=c[i];
- }
- void countsort(int p)
- {
- memset(b,0,sizeof(b));
- for(int i=1;i<=n;i++) b[(a[i]/p)%10]++;
- for(int i=1;i<=9;i++) b[i]=b[i-1]+b[i];
- for(int i=n;i>0;i--) c[b[(a[i]/p)%10]--]=a[i];
- }
- void radix(int nr)
- {
- int p10=1;
- for(int i=1;i<=nr;i++)
- {
- countsort(p10);
- atribuire(a,c);
- p10*=10;
- }
- }
- int main()
- {
- fin>>n;
- maxi=0;
- for(int i=1;i<=n;i++)
- {
- fin>>a[i];
- if(maxi<a[i]) maxi=a[i];
- }
- int nr=nrcifre(maxi);
- radix(nr);
- for(int i=1;i<=n;i++) fout<<a[i]<<" ";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement