alexandrheathen

Untitled

May 17th, 2018
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.46 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <windows.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. #include <math.h>
  6. #include<conio.h>
  7. #define MAX_LEN 10000
  8. int arrgen(int n, int *arr)
  9. {
  10.     for (int i = 0; i < n; i++)
  11.     {
  12.         arr[i] = rand() % (100 - 50 + 1) + 50;
  13.     }
  14.     return *arr;
  15. }
  16. int main()
  17. {
  18.     SetConsoleCP(1251);
  19.     SetConsoleOutputCP(1251);
  20.     srand(time(NULL));
  21.     int choice, menu, a, b, amount, rndArray[MAX_LEN], N = 3000;
  22.     time_t point1, point2, point3;
  23.     double d;
  24.     printf("1. Продолжить работу.\n");
  25.     printf("2. Завершить работу.\n");
  26.     printf("Выберите: "); scanf_s("%d", &choice);
  27.     printf("Количество: "); scanf_s("%d", &amount);
  28.     int n1 = amount;
  29.     printf("\n1. Сортировка пузырьком\n");
  30.     printf("2. Сортировка обменом\n");
  31.     printf("3. Сортировка вставками\n");
  32.     printf("4. Сортировка Шелла\n");
  33.     switch (choice)
  34.     {
  35.     case 1:
  36.         printf("\n0 - завершает программу");
  37.         do {
  38.             printf("\n\nВаш выбор: ");
  39.             scanf_s("%d", &menu);
  40.             switch (menu)
  41.             {
  42.             case 0: printf("Вы покидаете программу."); break;
  43.             case 1:
  44.                 point1 = time(NULL);
  45.                 for (int i = 0; i < N; i++)
  46.                 {
  47.                     rndArray[amount] = arrgen(amount, rndArray);
  48.                 }
  49.                 int tmp, is;
  50.                 point2 = time(NULL);
  51.                 for (int k = 0; k < N; k++)
  52.                 {
  53.                     rndArray[amount] = arrgen(amount, rndArray);
  54.                     do {
  55.                         is = 0;
  56.                         for (int i = 0; i < n1 - 1; i++)
  57.                             if (rndArray[i] > rndArray[i + 1])
  58.                             {
  59.                                 tmp = rndArray[i];
  60.                                 rndArray[i] = rndArray[i + 1];
  61.                                 rndArray[i + 1] = tmp;
  62.                                 is = 1;
  63.                             }
  64.                         n1--;
  65.                     } while (is);
  66.                 }
  67.                 point3 = time(NULL);
  68.                 d = (double)((point3 - point2) - (point2 - point1)) / N;
  69.                 printf("Время сотировки %f", d);
  70.                 break;
  71.             case 2:
  72.                 point1 = time(NULL);
  73.                 for (int i = 0; i < N; i++)
  74.                 {
  75.                     rndArray[amount] = arrgen(amount, rndArray);
  76.                 }
  77.                 int tmp1, jmin;
  78.                 point2 = time(NULL);
  79.                 for (int k = 0; k < N; k++)
  80.                 {
  81.                     for (int j = 0; j < amount - 1; j++)
  82.                     {
  83.                         jmin = j;
  84.                         for (int i = j + 1; i < amount; i++)
  85.                             if (rndArray[i] < rndArray[jmin]) jmin = i;
  86.                         tmp1 = rndArray[j];
  87.                         rndArray[j] = rndArray[jmin];
  88.                         rndArray[jmin] = tmp1;
  89.                     }
  90.                 }
  91.                 point3 = time(NULL);
  92.                 d = (double)((point3 - point2) - (point2 - point1)) / N;
  93.                 printf("Время сортировки: %f", d);
  94.                 break;
  95.             case 3:
  96.                 point1 = time(NULL);
  97.                 for (int i = 0; i < N; i++)
  98.                 {
  99.                     rndArray[amount] = arrgen(amount, rndArray);
  100.                 }
  101.                 int tmp2, i, j;
  102.                 point2 = time(NULL);
  103.                 for (int k = 0; k < N; k++)
  104.                 {
  105.                     for (j = 1; j < amount; j++)
  106.                     {
  107.                         tmp2 = rndArray[j];
  108.                         for (i = j - 1; i >= 0 && rndArray[i] > tmp2; i--)
  109.                         {
  110.                             rndArray[i + 1] = rndArray[i];
  111.                             rndArray[i] = tmp2;
  112.                         }
  113.                     }
  114.                 }
  115.                 point3 = time(NULL);
  116.                 d = (double)((point3 - point2) - (point2 - point1)) / N;
  117.                 printf("Время сортировки: %f", d);
  118.                 break;
  119.             case 4:
  120.                 point1 = time(NULL);
  121.                 for (int i = 0; i < N; i++)
  122.                 {
  123.                     rndArray[amount] = arrgen(amount, rndArray);
  124.                 }
  125.                 int tmp4;
  126.                 point2 = time(NULL);
  127.                 for (int k = 0; k < N; k++)
  128.                 {
  129.                     rndArray[amount] = arrgen(amount, rndArray);
  130.                     int arr2[100];
  131.                     arr2[0] = 1;
  132.                     int i;
  133.                     for (i = 1; i < 1000; i++)
  134.                     {
  135.                         if (3 * arr2[i - 1] > amount)
  136.                             break;
  137.                         if (i % 2 == 0)
  138.                             arr2[i] = 9 * pow(2, i) - 9 * pow(2, i / 2) + 1;
  139.                         else
  140.                             arr2[i] = 8 * pow(2, i) - 6 * pow(2, (i + 1) / 2) + 1;
  141.                     }
  142.                     int step = arr2[i];
  143.                     int j;
  144.                     while (step > 0)
  145.                     {
  146.                         i--;
  147.                         j = 0;
  148.                         for (j; j < (amount - step); j++)
  149.                         {
  150.                             int l = j;
  151.                             while (l >= 0 && rndArray[l] > rndArray[l + step])
  152.                             {
  153.                                 int tmp = rndArray[l];
  154.                                 rndArray[l] = rndArray[l + step];
  155.                                 rndArray[l + step] = tmp;
  156.                                 l--;
  157.                             }
  158.                         }
  159.                         step = rndArray[i];
  160.                     }
  161.                 }
  162.                 point3 = time(NULL);
  163.                 d = (double)((point3 - point2) - (point2 - point1)) / N;
  164.                 printf("Время сортировки: %f", d);
  165.                 break;
  166.             default: printf("Выберете другой пункт.\n");
  167.             }
  168.         } while (menu != 0); break;
  169.     case 2: printf("Вы покидаете программу"); break;
  170.     default: printf("Вы ошиблись в выборе.\n");
  171.     }
  172.     return 0;
  173. }
Advertisement
Add Comment
Please, Sign In to add comment