Advertisement
Guest User

Untitled

a guest
Feb 18th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.22 KB | None | 0 0
  1. #include <math.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5.  
  6. const double e = 1e-6;
  7. int c = 0; //compares
  8. int m = 0;
  9.  
  10. void gen1 (double * a, int n) //in right order
  11. {
  12.     int elem = rand();
  13.     double k = 1000;
  14.     int j = rand();
  15.     for (int i = 0; i < n; i++)
  16.     {
  17.         a[i] = elem / k;
  18.         if (rand() % 2)
  19.         {
  20.             a[i] *= -1;
  21.         }
  22.         k += j;
  23.     }
  24. }
  25.  
  26. void gen2(double * a, int n) //reversed order
  27. {
  28.     int elem = rand();
  29.     double k = rand();
  30.     int j = rand();
  31.     for (int i = 0; i < n; i++)
  32.     {
  33.         a[i] = k / elem;
  34.         if (rand() % 2)
  35.         {
  36.             a[i] *= -1;
  37.         }
  38.         k += j;
  39.     }
  40. }
  41.  
  42. void gen3(double * a, int n) //random
  43. {
  44.     int elem = rand();
  45.     double k = 1000;
  46.     for (int i = 0; i < n; i++)
  47.     {
  48.         a[i] = elem / k;
  49.         if (rand() % 2)
  50.         {
  51.             a[i] *= -1;
  52.         }
  53.         elem = rand();
  54.     }
  55. }
  56.  
  57. void swap(double * b, double * c)
  58. {
  59.     double t = *b;
  60.     *b = *c;
  61.     *c = t;
  62. }
  63.  
  64. void bubble_sort(double * a, int n)
  65. {
  66.     for (int i = 1; i < n; i++)
  67.     {
  68.         for (int j = n - 1; j >= i; j--)
  69.         {
  70.             c++;
  71.             if (fabs(a[j]) > fabs(a[j - 1]) - e)
  72.             {
  73.                 m++;
  74.                 swap(a + j, a + j - 1);
  75.             }
  76.         }
  77.     }
  78. }
  79.  
  80. void shell_sort(double * a, int n)
  81. {
  82.     int h = n / 2; //displacement
  83.     int l, k;
  84.     while (h)
  85.     {
  86.         for (int i = 0; i < h; i++)
  87.         {
  88.             l = n / h; //length of little array
  89.             double elem;
  90.             for(int j = 1; j < l; j++) //insert_sort for array
  91.             {
  92.                 elem = a[i + j * h];
  93.                 for (k = j - 1; k >= 0 && (fabs(elem) >= fabs(a[i + k * h]) - e); k--)
  94.                 {
  95.                     a[i + h + k * h] = a[i + h * k];
  96.                     m++;
  97.                     c++;
  98.                 }
  99.                 if (k >= 0)
  100.                 {
  101.                     c++;
  102.                 }
  103.                 a[i + h + k * h] = elem;
  104.                 m++;
  105.             }
  106.         }
  107.         h = h / 2;
  108.     }
  109. }
  110.  
  111. int main(void)
  112. {
  113.     int n;
  114.     scanf("%d", &n);
  115.     int type; // 1 - bubble_sort, 2 - shell_sort
  116.     scanf("%d", &type);
  117.     double * a = malloc(n * sizeof(double));
  118.     srand(time(NULL));
  119.     if (type == 1)
  120.     {
  121.         gen1(a, n);
  122.         bubble_sort(a, n);
  123.         printf("%d %d\n", c, m);
  124.         c = m = 0;
  125.         gen2(a, n);
  126.         bubble_sort(a, n);
  127.         printf("%d %d\n", c, m);
  128.         c = m = 0;
  129.         gen3(a, n);
  130.         bubble_sort(a, n);
  131.         printf("%d %d\n", c, m);
  132.         c = m = 0;
  133.         gen3(a, n);
  134.         bubble_sort(a, n);
  135.         printf("%d %d\n", c, m);
  136.         c = m = 0;
  137.     }
  138.     if (type == 2)
  139.     {
  140.         gen1(a, n);
  141.         shell_sort(a, n);
  142.         printf("%d %d\n", c, m);
  143.         c = m = 0;
  144.         gen2(a, n);
  145.         shell_sort(a, n);
  146.         printf("%d %d\n", c, m);
  147.         c = m = 0;
  148.         gen3(a, n);
  149.         shell_sort(a, n);
  150.         printf("%d %d\n", c, m);
  151.         c = m = 0;
  152.         gen3(a, n);
  153.         shell_sort(a, n);
  154.         printf("%d %d\n", c, m);
  155.         c = m = 0;
  156.     }
  157.     free(a);
  158.     return 0;
  159. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement