Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- // Карманная сортировка чисел по последней цифре.
- void PocketSortByLastDigit( std::vector<int>& intArray )
- {
- std::vector<int> pockets( 10, 0 );
- // Вычисляем количество элементов в каждом кармане.
- for( int i = 0; i < intArray.size(); ++i ) {
- ++pockets[intArray[i] % 10];
- }
- // Считаем концы каждого кармана в результирующем массиве.
- for( int i = 1; i < pockets.size(); ++i ) {
- pockets[i] += pockets[i - 1];
- }
- std::vector<int> result( intArray.size(), 0 );
- // Переносим объекты из исходного массива. С конца, чтобы заполнять карманы с конца и сохранить стабильность.
- for( int i = intArray.size(); i >= 0; ++i ) {
- // Кладем в нужный карман.
- // Позицию кармана сдвигаем, чтобы следующие элементы были положены на свободное место.
- result[--pockets[intArray[i] % 10]] = intArray[i];
- }
- intArray = std::move( result );
- }
- int main()
- {
- std::vector<int> intArray;
- int number = 0;
- // Считывание массива неизвестной наперед длины.
- // Эквивалентно while( ( std::cin >> number ).operator bool() ) {
- while( std::cin >> number ) {
- intArray.push_back( number );
- }
- PocketSortByLastDigit( intArray );
- for( int i = 0; i < intArray.size(); ++i ) {
- std::cout << intArray[i] << " ";
- }
- std::cout << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement