Advertisement
Guest User

Untitled

a guest
Feb 25th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.99 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. struct Races
  6. {
  7. char country[11];
  8. char name[11];
  9. };
  10.  
  11. struct Races* Merge_sort(struct Races *up, struct Races *down, unsigned int left, unsigned int right)
  12. {
  13. if (left == right)
  14. {
  15. down[left] = up[left];
  16. return down;
  17. }
  18.  
  19. int middle = (left + right) / 2;
  20.  
  21. struct Races *l_buff = Merge_sort(up, down, left, middle);
  22. struct Races *r_buff = Merge_sort(up, down, middle + 1, right);
  23.  
  24. struct Races *res = l_buff == up ? down : up;
  25.  
  26. int l_cur = left;
  27. int r_cur = middle + 1;
  28. int i;
  29. for (i = left; i <= right; i++)
  30. {
  31. if ((l_cur <= middle) && (r_cur <= right))
  32. {
  33. if (strcmp(l_buff[l_cur].country, r_buff[r_cur].country) <= 0)
  34. {
  35. res[i] = l_buff[l_cur];
  36. l_cur++;
  37. }
  38. else
  39. {
  40. res[i] = r_buff[r_cur];
  41. r_cur++;
  42. }
  43. }
  44. else if (l_cur <= middle)
  45. {
  46. res[i] = l_buff[l_cur];
  47. l_cur++;
  48. }
  49. else
  50. {
  51. res[i] = r_buff[r_cur];
  52. r_cur++;
  53. }
  54. }
  55. return res;
  56. }
  57.  
  58. int main()
  59. {
  60. int i, n;
  61. struct Races mas[100000], mas2[100000];
  62. FILE *fp;
  63. fp = fopen("input.txt", "r");
  64. fscanf(fp, "%d", &n);
  65. for (i = 0; i < n; i++)
  66. {
  67. fscanf(fp, "%s", mas[i].country);
  68. fscanf(fp, "%s", mas[i].name);
  69. }
  70. fclose(fp);
  71. struct Races *mas_res = Merge_sort(mas, mas2, 0, n - 1);
  72.  
  73. fp = fopen("output.txt", "w");
  74. struct Races cntr;
  75. i = 0;
  76. while (i < n)
  77. {
  78. fprintf(fp, "=== %s ===\n", mas_res[i].country);
  79. cntr = mas_res[i];
  80. fprintf(fp, "%s\n", mas_res[i].name);
  81. i++;
  82. while (strcmp(cntr.country, mas_res[i].country) == 0)
  83. {
  84. fprintf(fp, "%s\n", mas_res[i].name);
  85. i++;
  86. }
  87. }
  88. fclose(fp);
  89. return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement