Advertisement
smatskevich

Radix Sort

Nov 25th, 2015
389
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.99 KB | None | 0 0
  1. #include <vector>
  2. #include <iostream>
  3.  
  4. using std::vector;
  5.  
  6. // Последняя цифра.
  7. int f( int key )
  8. {
  9.     return key % 10;
  10. }
  11.  
  12. void CountingSort( vector<int>& a )
  13. {
  14.     // Считаем, сколько раз встречаются f( a[i] ).
  15.     vector<int> counts( 10, 0 );
  16.     for( int i = 0; i < a.size(); ++i ) {
  17.         ++counts[f( a[i] )];
  18.     }
  19.     // Преобразуем в индексы концов групп.
  20.     for( int i = 1; i < 10; ++i ) {
  21.         counts[i] += counts[i - 1];
  22.     }
  23.     // Сразу строим результат.
  24.     vector<int> result( a.size() );
  25.     for( int i = a.size() - 1; i >= 0; --i ) {
  26.         int groupNumber = f( a[i] );
  27.         --counts[groupNumber];
  28.         result[counts[groupNumber]] = a[i];
  29.     }
  30.     std::swap( a, result );
  31. }
  32.  
  33. int main()
  34. {
  35.     int n = 0;
  36.     std::cin >> n;
  37.     vector<int> a( n, 0 );
  38.     for( int i = 0; i < n; ++i ) {
  39.         std::cin >> a[i];
  40.     }
  41.  
  42.     CountingSort( a );
  43.  
  44.     for( int i = 0; i < n; ++i ) {
  45.         std::cout << a[i] << " ";
  46.     }
  47.     std::cout << std::endl;
  48.     return 0;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement