smatskevich

MyFirstSort

Oct 21st, 2017
225
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <vector>
  3. using std::vector;
  4.  
  5. struct CSegment {
  6.     int Left = 0;
  7.     int Right = 0;
  8.  
  9.     // Сравнение по левому краю, а если они совпадают, то по правому.
  10.     bool operator<( const CSegment& other ) const
  11.         { return Left < other.Left || ( Left == other.Left && Right < other.Right ); }
  12. };
  13.  
  14. // Функция сравнения по длине.
  15. bool CompareByLength( const CSegment& first, const CSegment& second )
  16. {
  17.     return first.Right - first.Left < second.Right - second.Left;
  18. }
  19.  
  20. // Функтор для сортировки отрезков по убыванию длины.
  21. class CCompareByLengthDescending {
  22. public:
  23.     bool operator()( const CSegment& first, const CSegment& second ) { return CompareByLength( second, first ); }
  24. };
  25.  
  26. // Bubble sort, использующий оператор сравнения.
  27. void MyFirstSort( vector<CSegment>& arr )
  28. {
  29.     const int n = arr.size();
  30.     for( int i = 0; i < n - 1; ++i ) {
  31.         for( int j = 1; j < n - i; ++j ) {
  32.             if( arr[j] < arr[j - 1] ) {
  33.                 std::swap( arr[j], arr[j - 1] );
  34.             }
  35.         }
  36.     }
  37. }
  38.  
  39. // Bubble sort, получающий функцию сравнения.
  40. void MyFirstSort2( vector<CSegment>& arr, bool ( *compare )( const CSegment&, const CSegment& ) )
  41. {
  42.     const int n = arr.size();
  43.     for( int i = 0; i < n - 1; ++i ) {
  44.         for( int j = 1; j < n - i; ++j ) {
  45.             if( compare( arr[j], arr[j - 1] ) ) {
  46.                 std::swap( arr[j], arr[j - 1] );
  47.             }
  48.         }
  49.     }
  50. }
  51.  
  52. // Bubble sort, получающий либо функцию сравнения, либо функтор.
  53. template <typename Compare>
  54. void MyFirstSort3( vector<CSegment>& arr, Compare cmp )
  55. {
  56.     const int n = arr.size();
  57.     for( int i = 0; i < n - 1; ++i ) {
  58.         for( int j = 1; j < n - i; ++j ) {
  59.             if( cmp( arr[j], arr[j - 1] ) ) {
  60.                 std::swap( arr[j], arr[j - 1] );
  61.             }
  62.         }
  63.     }
  64. }
  65.  
  66. int main()
  67. {
  68.     std::vector<CSegment> segments;
  69.     CSegment segment;
  70.     while( std::cin >> segment.Left >> segment.Right ) {
  71.         segments.push_back( segment );
  72.     }
  73.  
  74. //  MyFirstSort( segments );
  75. //  MyFirstSort2( segments, CompareByLength );
  76. //  MyFirstSort3( segments, CompareByLength );
  77.     CCompareByLengthDescending comparator;
  78.     MyFirstSort3( segments, comparator );
  79. //  MyFirstSort3( segments, std::less<CSegment>() );
  80.  
  81.     for( int i = 0; i < segments.size(); ++i ) {
  82.         std::cout << "[" << segments[i].Left << ", " << segments[i].Right << "]\n";
  83.     }
  84.     return 0;
  85. }
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×