Advertisement
smatskevich

CountingSortByModule

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