Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<fstream>
- #define Nmax 1000001
- using namespace std;
- int a[Nmax];
- int output[Nmax];
- int getMax(int n) /// Calculeaza maximul din vectorul initial
- {
- int maxX=a[0];
- for(int i=1;i<n;++i)
- if(a[i]>maxX)
- maxX=a[i];
- return maxX;
- }
- void countSort(int n,int exp) /// Counting Sort - se afla la baza RadixSort
- {
- int i,count[32]={0};
- for(i=0;i<n;++i) /// Tinem minte numarul de aparitii in vectorul count
- count[(a[i]/exp)%32]++;
- for(i=1;i<32;++i) /// Modificam count[i] astfel incat count[i] sa contina pozitia cifrei din output[]
- count[i]+=count[i-1];
- for(i=n-1;i>=0;--i) /// Cream vectorul output
- {
- output[count[(a[i]/exp)%32]-1]=a[i];
- count[(a[i]/exp)%32]--;
- }
- for(i=0;i<n;++i) /// Copiem continutul vectorului output[] in a[]
- a[i]=output[i];
- }
- void radixsort(int n) /// Radix Sort
- {
- int m=getMax(n); /// Calculam cel mai mare element pentru a afla numarul de cifre al acestuia
- for(int exp=1;m/exp>0;exp*=32) /// Folosim Counting Sort pentru fiecare cifra
- countSort(n,exp);
- }
- int main()
- {
- ifstream f("radixsort.in");
- int n,i;
- f>>n;
- for(i=0;i<n;++i)
- f>>a[i];
- radixsort(n);
- f.close();
- ofstream g("radixsort.out");
- for(i=0;i<n;++i)
- (g<<a[i]).put(' ');
- g.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement