Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- struct Races
- {
- char country[11];
- char name[11];
- };
- struct Races* Merge_sort(struct Races *up, struct Races *down, unsigned int left, unsigned int right)
- {
- if (left == right)
- {
- down[left] = up[left];
- return down;
- }
- int middle = (left + right) / 2;
- struct Races *l_buff = Merge_sort(up, down, left, middle);
- struct Races *r_buff = Merge_sort(up, down, middle + 1, right);
- struct Races *res = l_buff == up ? down : up;
- int l_cur = left;
- int r_cur = middle + 1;
- int i;
- for (i = left; i <= right; i++)
- {
- if ((l_cur <= middle) && (r_cur <= right))
- {
- if (strcmp(l_buff[l_cur].country, r_buff[r_cur].country) <= 0)
- {
- res[i] = l_buff[l_cur];
- l_cur++;
- }
- else
- {
- res[i] = r_buff[r_cur];
- r_cur++;
- }
- }
- else if (l_cur <= middle)
- {
- res[i] = l_buff[l_cur];
- l_cur++;
- }
- else
- {
- res[i] = r_buff[r_cur];
- r_cur++;
- }
- }
- return res;
- }
- int main()
- {
- int i, n;
- struct Races mas[100000], mas2[100000];
- FILE *fp;
- fp = fopen("input.txt", "r");
- fscanf(fp, "%d", &n);
- for (i = 0; i < n; i++)
- {
- fscanf(fp, "%s", mas[i].country);
- fscanf(fp, "%s", mas[i].name);
- }
- fclose(fp);
- struct Races *mas_res = Merge_sort(mas, mas2, 0, n - 1);
- fp = fopen("output.txt", "w");
- struct Races cntr;
- i = 0;
- while (i < n)
- {
- fprintf(fp, "=== %s ===\n", mas_res[i].country);
- cntr = mas_res[i];
- fprintf(fp, "%s\n", mas_res[i].name);
- i++;
- while (strcmp(cntr.country, mas_res[i].country) == 0)
- {
- fprintf(fp, "%s\n", mas_res[i].name);
- i++;
- }
- }
- fclose(fp);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement