StoneHaos

Untitled

Nov 29th, 2021
649
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2.  
  3. int max(int a, int b) {
  4.     return ((a > b) ? a : b);
  5. }
  6.  
  7. int min(int a, int b) {
  8.     return ((a < b) ? a : b);
  9. }
  10.  
  11. int fgetsize(FILE *f) {
  12.     int pos = ftell(f);
  13.     fseek(f, 0, SEEK_END);
  14.     int size = ftell(f);
  15.     fseek(f, pos, SEEK_SET);
  16.     return size;
  17. }
  18.  
  19. int main(void) {
  20.     FILE *f, *f1, *f2, *flast;
  21.  
  22.     f1 = fopen("f1.txt", "w");
  23.     fclose(f1);
  24.     f2 = fopen("f2.txt", "w");
  25.     fclose(f2);
  26.    
  27.     do {
  28.         f = fopen("f.txt", "r");
  29.         f1 = fopen("f1.txt", "w");
  30.         f2 = fopen("f2.txt", "w");
  31.         int x, last;
  32.         //Распределение
  33.         while (true) {
  34.             int ret = fscanf(f, "%d", &x);
  35.             if (ret != EOF) {
  36.                 if (fgetsize(f1) == 0) {
  37.                     fprintf(f1, "%d ", x);
  38.                     last = x;
  39.                 }
  40.                 else {
  41.                     if (last <= x) {
  42.                         fprintf(f1, "%d ", x);
  43.                         last = x;
  44.                     }
  45.                     else {
  46.                         fprintf(f2, "%d ", x);
  47.                     }
  48.                 }
  49.             }
  50.             else {
  51.                 break;
  52.             }
  53.         }
  54.  
  55.         fclose(f);
  56.         fclose(f1);
  57.         fclose(f2);
  58.  
  59.         f = fopen("f.txt", "w");
  60.         f1 = fopen("f1.txt", "r");
  61.         f2 = fopen("f2.txt", "r");
  62.         int a, b;
  63.         //Слияние
  64.         while (true) {
  65.             int ret1 = fscanf(f1, "%d", &a);
  66.             int ret2 = fscanf(f2, "%d", &b);
  67.             if (ret1 != EOF && ret2 != EOF) {
  68.                 fprintf(f, "%d %d ", min(a, b), max(a, b));
  69.             }
  70.             else {
  71.                 if (ret1 == EOF && ret2 != EOF) {
  72.                     fprintf(f, "%d ", b);
  73.                     while (fscanf(f2, "%d", &b) != EOF) {
  74.                         fprintf(f, "%d ", b);
  75.                     }
  76.                 }
  77.                 else if (ret1 != EOF && ret2 == EOF) {
  78.                     fprintf(f, "%d ", a);
  79.                     while (fscanf(f1, "%d", &a) != EOF) {
  80.                         fprintf(f, "%d ", a);
  81.                     }
  82.                 }
  83.                 break;
  84.             }
  85.         }
  86.         if (fgetsize(f2) == 0)
  87.             break;
  88.  
  89.         fclose(f);
  90.         fclose(f1);
  91.         fclose(f2);
  92.     } while(true);
  93.  
  94.     fclose(f);
  95.     fclose(f1);
  96.     fclose(f2);
  97.    
  98.     return 0;
  99.    
  100. }
RAW Paste Data