Advertisement
Guest User

Untitled

a guest
Mar 18th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.00 KB | None | 0 0
  1. #include <algorithm>
  2. #include <time.h>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6.  
  7. class Global {
  8. private:
  9. int *arr, count_sr, count_perest;
  10. public:
  11. Global(int n) {
  12. arr = new int[n];
  13. for (int i = 0; i < n; i++)
  14. arr[i] = rand() % 99 + 1;
  15. }
  16. void sort_(int n) {
  17. sort(arr, arr + n);
  18. }
  19. void write_to_f(int n, ofstream &out) {
  20. for (int i = 0; i < n; i++)
  21. out << arr[i] << ' ';
  22. out << ' ';
  23. out.close();
  24. }
  25. void show_arr(int n) {
  26. for (int i = 0; i < n; i++)
  27. cout << arr[i] << ' ';
  28. cout << '\n';
  29. }
  30. void read_in_f(int n, ifstream &in) {
  31. for (int i = 0; i < n; i++)
  32. in >> arr[i];
  33.  
  34. in.close();
  35. }
  36. //Описание функции сортировки простым слиянием
  37. void Simple_Merging_Sort(char *name) {
  38. int a1, a2, k, i, j, kol, tmp;
  39. FILE *f, *f1, *f2;
  40. kol = 0;
  41. if ((f = fopen(name, "r")) == NULL)
  42. printf("\nИсходный файл не может быть прочитан...");
  43. else {
  44. while (!feof(f)) {
  45. fscanf(f, "%d", &a1);
  46. kol++;
  47. }
  48. fclose(f);
  49. }
  50. k = 1;
  51. while (k < kol) {
  52. f = fopen(name, "r");
  53. f1 = fopen("smsort_1", "w");
  54. f2 = fopen("smsort_2", "w");
  55. if (!feof(f)) fscanf(f, "%d", &a1);
  56. while (!feof(f)) {
  57. for (i = 0; i < k && !feof(f); i++) {
  58. fprintf(f1, "%d ", a1);
  59. fscanf(f, "%d", &a1);
  60. }
  61. for (j = 0; j < k && !feof(f); j++) {
  62. fprintf(f2, "%d ", a1);
  63. fscanf(f, "%d", &a1);
  64. }
  65. }
  66. fclose(f2);
  67. fclose(f1);
  68. fclose(f);
  69.  
  70. f = fopen(name, "w");
  71. f1 = fopen("smsort_1", "r");
  72. f2 = fopen("smsort_2", "r");
  73. if (!feof(f1)) fscanf(f1, "%d", &a1);
  74. if (!feof(f2)) fscanf(f2, "%d", &a2);
  75. while (!feof(f1) && !feof(f2)) {
  76. i = 0;
  77. j = 0;
  78. while (i < k && j < k && !feof(f1) && !feof(f2)) {
  79. if (a1 > a2) {
  80.  
  81. fprintf(f, "%d ", a1);
  82. fscanf(f1, "%d", &a1);
  83. i++;
  84. }
  85. else {
  86.  
  87. fprintf(f, "%d ", a2);
  88. fscanf(f2, "%d", &a2);
  89. j++;
  90. }
  91. }
  92. while (i < k && !feof(f1)) {
  93. fprintf(f, "%d ", a1);
  94. fscanf(f1, "%d", &a1);
  95. i++;
  96. }
  97. while (j < k && !feof(f2)) {
  98. fprintf(f, "%d ", a2);
  99. fscanf(f2, "%d", &a2);
  100. j++;
  101. }
  102. }
  103. while (!feof(f1)) {
  104. fprintf(f, "%d ", a1);
  105. fscanf(f1, "%d", &a1);
  106. }
  107. while (!feof(f2)) {
  108. fprintf(f, "%d ", a2);
  109. fscanf(f2, "%d", &a2);
  110. }
  111. fclose(f2);
  112. fclose(f1);
  113. fclose(f);
  114. k *= 2;
  115. }cout << "kol-vo sr - " << i << '\n';
  116. cout << "kol vo perest - " << j << '\n';
  117. remove("smsort_1");
  118. remove("smsort_2");
  119. }
  120. ~Global() {
  121. delete[] arr;
  122. }
  123. };
  124.  
  125. int main() {
  126. srand(time(0));
  127. ofstream out("2.txt");
  128. ifstream in("2.txt");
  129. int n(0);
  130. cout << "Enter size of array: ";
  131. cin >> n;
  132. Global obj(n);
  133. obj.sort_(n);
  134. cout << "Source array: ";
  135. obj.show_arr(n);
  136. obj.write_to_f(n, out);
  137. obj.Simple_Merging_Sort("2.txt");
  138. obj.read_in_f(n, in);
  139. cout << "Change array: ";
  140. obj.show_arr(n);
  141. system("pause");
  142. return 0;
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement