Advertisement
IISergeyII

Untitled

Oct 28th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.39 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <stdlib.h>
  4.  
  5. using namespace std;
  6.  
  7. const size_t NL = 20; // Name Length - it's max size of the runner's name and country
  8.  
  9. struct runner
  10. {
  11.     char country[NL];
  12.     char name[NL];
  13.  
  14. };
  15.  
  16. void mergeSort(vector<runner> &a, size_t start, size_t end)
  17. {
  18.     if (end - start < 2)
  19.         return;
  20.     if (end - start == 2)
  21.     {
  22.         if (a[start].country > a[start + 1].country)
  23.             swap(a[start], a[start + 1]);
  24.         return;
  25.     }
  26.  
  27.     mergeSort(a, start, start + (end - start) / 2);
  28.     mergeSort(a, start + (end - start) / 2, end);
  29.     vector<runner> b;
  30.     size_t b1 = start;
  31.     size_t e1 = start + (end - start) / 2;
  32.     size_t b2 = e1;
  33.     while (b.size() < end - start)
  34.     {
  35.         if (b1 >= e1 || (b2 < end && a[b2].country <= a[b1].country ))
  36.         {
  37.             b.push_back(a[b2]);
  38.             ++b2;
  39.         }
  40.         else
  41.         {
  42.             b.push_back(a[b1]);
  43.             ++b1;
  44.         }
  45.     }
  46.     for (size_t i = start; i < end; ++i)
  47.         a[i] = b[i - start];
  48. }
  49.  
  50. int main()
  51. {
  52.     int n;
  53.     runner r_t;
  54.     cin >> n;
  55.     vector<runner> v;
  56.  
  57.     for (int i = 0; i < n; ++i)
  58.     {
  59.         cin >> r_t.country >> r_t.name;
  60.         v.push_back(r_t);
  61.     }
  62.  
  63.  
  64.     mergeSort(v, 0, v.size());
  65.  
  66.     for (size_t i = 0; i < v.size(); ++i)
  67.         cout << v[i].country << " " << v[i].name << "\n";
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement