Advertisement
a53

RadixSort

a53
Nov 26th, 2018
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.24 KB | None | 0 0
  1. #include<fstream>
  2. #define Nmax 1000001
  3. using namespace std;
  4. int a[Nmax];
  5. int output[Nmax];
  6.  
  7. int getMax(int n) /// Calculeaza maximul din vectorul initial
  8. {
  9. int maxX=a[0];
  10. for(int i=1;i<n;++i)
  11. if(a[i]>maxX)
  12. maxX=a[i];
  13. return maxX;
  14. }
  15.  
  16. void countSort(int n,int exp) /// Counting Sort - se afla la baza RadixSort
  17. {
  18. int i,count[32]={0};
  19. for(i=0;i<n;++i) /// Tinem minte numarul de aparitii in vectorul count
  20. count[(a[i]/exp)%32]++;
  21. for(i=1;i<32;++i) /// Modificam count[i] astfel incat count[i] sa contina pozitia cifrei din output[]
  22. count[i]+=count[i-1];
  23. for(i=n-1;i>=0;--i) /// Cream vectorul output
  24. {
  25. output[count[(a[i]/exp)%32]-1]=a[i];
  26. count[(a[i]/exp)%32]--;
  27. }
  28. for(i=0;i<n;++i) /// Copiem continutul vectorului output[] in a[]
  29. a[i]=output[i];
  30. }
  31.  
  32. void radixsort(int n) /// Radix Sort
  33. {
  34. int m=getMax(n); /// Calculam cel mai mare element pentru a afla numarul de cifre al acestuia
  35. for(int exp=1;m/exp>0;exp*=32) /// Folosim Counting Sort pentru fiecare cifra
  36. countSort(n,exp);
  37. }
  38.  
  39. int main()
  40. {
  41. ifstream f("radixsort.in");
  42. int n,i;
  43. f>>n;
  44. for(i=0;i<n;++i)
  45. f>>a[i];
  46. radixsort(n);
  47. f.close();
  48. ofstream g("radixsort.out");
  49. for(i=0;i<n;++i)
  50. (g<<a[i]).put(' ');
  51. g.close();
  52. return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement