Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <stdlib.h>
- using namespace std;
- const size_t NL = 20; // Name Length - it's max size of the runner's name and country
- struct runner
- {
- char country[NL];
- char name[NL];
- };
- void mergeSort(vector<runner> &a, size_t start, size_t end)
- {
- if (end - start < 2)
- return;
- if (end - start == 2)
- {
- if (a[start].country > a[start + 1].country)
- swap(a[start], a[start + 1]);
- return;
- }
- mergeSort(a, start, start + (end - start) / 2);
- mergeSort(a, start + (end - start) / 2, end);
- vector<runner> b;
- size_t b1 = start;
- size_t e1 = start + (end - start) / 2;
- size_t b2 = e1;
- while (b.size() < end - start)
- {
- if (b1 >= e1 || (b2 < end && a[b2].country <= a[b1].country ))
- {
- b.push_back(a[b2]);
- ++b2;
- }
- else
- {
- b.push_back(a[b1]);
- ++b1;
- }
- }
- for (size_t i = start; i < end; ++i)
- a[i] = b[i - start];
- }
- int main()
- {
- int n;
- runner r_t;
- cin >> n;
- vector<runner> v;
- for (int i = 0; i < n; ++i)
- {
- cin >> r_t.country >> r_t.name;
- v.push_back(r_t);
- }
- mergeSort(v, 0, v.size());
- for (size_t i = 0; i < v.size(); ++i)
- cout << v[i].country << " " << v[i].name << "\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement