Advertisement
epidzhx

tasha_5lab

May 17th, 2018
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.96 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. void sort1(int* a, int n)
  6. {
  7.     for (int i = 0; i < n; i++)
  8.     {
  9.         int j = i;
  10.         while ((j > 0) && (a[j] < a[j-1]))
  11.         {
  12.             int c = a[j];
  13.             a[j] = a[j-1];
  14.             a[j-1] = c;
  15.             j-=1;
  16.         }
  17.     }
  18. }
  19.  
  20. void merge(int *a, int left, int middle, int right)
  21. {
  22.     int *res = (int*) malloc(sizeof(int) * (right - left+1));
  23.     int il = 0, ir = 0;
  24.    
  25.     while ((left + il < middle) && (middle + ir < right))
  26.     {
  27.         if (a[left + il] < a[middle + ir])
  28.         {
  29.             res[il + ir] = a[left + il];
  30.             il++;
  31.         }
  32.         else
  33.         {
  34.             res[il + ir] = a[middle + ir];
  35.             ir++;
  36.         }
  37.     }
  38.    
  39.     while (left + il < middle)
  40.     {
  41.         res[il + ir] = a[left + il];
  42.         il++;
  43.     }
  44.    
  45.     while (middle + ir < right)
  46.     {
  47.         res[il + ir] = a[middle + ir];
  48.         ir++;
  49.     }
  50.    
  51.     for (int i = 0; i < il + ir; i++)
  52.         a[i+left] = res[i];
  53.     free(res);
  54. }
  55.  
  56. void sort2(int *a, int left, int right)
  57. {
  58.     if (left + 1 < right)
  59.     {
  60.         int m = (left + right) / 2;
  61.         sort2(a, left, m);
  62.         sort2(a, m+1, right);
  63.         merge(a, left, m, right);
  64.     }
  65. }
  66.  
  67. int *readf(int *n)
  68. {
  69.     FILE *f = fopen("input.txt", "r");
  70.     int *a;
  71.     if (f != NULL)
  72.     {
  73.         fscanf(f, "%d", n);
  74.         a = (int*) malloc(*n*sizeof(int));
  75.         for (int i = 0; i < *n; i++)
  76.             fscanf(f, "%d", &a[i]);
  77.        
  78.         fclose(f);
  79.     }
  80.     return a;
  81. }
  82.  
  83. void writef(int *a, int n)
  84. {
  85.     FILE *f = fopen("out.txt", "w");
  86.     fprintf(f, "%d ", n);
  87.     for (int i = 0; i < n; i++)
  88.         fprintf(f, "%d ", a[i]);
  89.     fclose(f);
  90. }
  91.  
  92. int main()
  93. {
  94.     int n = 0;
  95.     int *arr = readf(&n);
  96.    
  97.     sort1(arr, n);
  98.     writef(arr, n);
  99.    
  100.     arr = readf(&n);
  101.     sort2(arr, 0, n-1);
  102.     writef(arr, n);
  103.     free(arr);
  104.     return 0;
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement