Advertisement
hurmawe

curswork_for_Dima

May 30th, 2022 (edited)
855
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 12.19 KB | None | 0 0
  1. #include <time.h>//для рандомных элементов, а также для замера времени (clock())
  2. #include <stdio.h>  //чтение и печать сообщений, циклы
  3. #include <stdlib.h> //прерывание программы>
  4. #include <locale.h> //русский язык в visual stidia
  5.  
  6. unsigned long long counter_b = 0;//счетчик перестановк в пузырьке
  7. unsigned long long counter_q = 0;//счетчик перестановк в быстрой
  8. unsigned long long counter_s = 0;//счетчик перестановк в выборе
  9.  
  10.  
  11. void bubble(int array[], int lenght)// сортировка пузырьком
  12. {
  13.     int vr = 0;
  14.     for (int i = 0; i < lenght - 1; i++)
  15.     {
  16.         for (int j = lenght - 2; j >= i; j--)
  17.         {
  18.             if (array[j] > array[j + 1])
  19.             {
  20.                 vr = array[j];
  21.                 array[j] = array[j + 1];
  22.                 array[j + 1] = vr;
  23.                 counter_b++;
  24.             }
  25.         }
  26.     }
  27. }
  28.  
  29. void Qsort(int array[], int first, int last)//быстрая
  30. {
  31.     int l, r, vr, x;
  32.     if (first < last)
  33.     {
  34.         x = array[(last + first) / 2];
  35.         l = first; r = last;
  36.         while (l <= r)
  37.         {
  38.             while (array[l] < x)l++;
  39.             while (array[r] > x)r--;
  40.             if (l <= r)
  41.             {
  42.                 counter_q++;
  43.                 vr = array[l];
  44.                 array[l] = array[r];
  45.                 array[r] = vr;
  46.                 l++; r--;
  47.             }
  48.         }
  49.         Qsort(array, first, r);
  50.         Qsort(array, l, last);
  51.     }
  52. }
  53.  
  54. void selection(int array[], int lenght)//выбора
  55. {
  56.     int vr;
  57.     for (int i = 0; i < lenght - 2; i++)
  58.         for (int j = i + 1; j < lenght - 1; j++)
  59.             if (array[i] > array[j])
  60.             {
  61.                 vr = array[j];
  62.                 array[j] = array[j + 1];
  63.                 array[j + 1] = vr;
  64.                 counter_s++;
  65.             }
  66. }
  67. int main()
  68. {
  69.     setlocale(LC_ALL, "Russian");//русифакатор. Нужно только в visual studia. Удалить в других компиляторах
  70.     srand(time(0));//разные значения каждый раз
  71.     const int lenght = 100000;//длина массива
  72.     int array1[lenght];//начальный массив
  73.     int array2[lenght];//копия, для возможности сортировки несколько раз
  74.  
  75.     printf("Это программа сравнения метода сортировок «быстрой сортировки» и метода «пузырька» , а также выбора, и сопоставить их эффективность.\n");
  76.     printf("Проводим расчеты. Массив состоит из 100000 элементов\n");
  77.  
  78.     clock_t time_start;//начало замера времени
  79.     clock_t end_time;//конец замер времени
  80.  
  81.     float qsort;//количество времени затраченное на быструю
  82.     float bsort;//количество времени затраченное на пузырек
  83.     float ssort;//количество времени затраченное на выбора
  84.  
  85.     //средние значения
  86.     float med_qsort = 0; unsigned long long med_counter_q = 0;//быстрая
  87.     float med_bsort = 0; unsigned long long med_counter_b = 0;//пузырек
  88.     float med_ssort = 0; unsigned long long med_counter_s = 0;//выбора
  89.  
  90.     int loop = 1;//переменая отвечающая за количество повторов, а также порядок попыток
  91.     while (loop != 5)
  92.     {
  93.         printf("\nПопытка %d\n", loop);
  94.         for (int i = 0; i < lenght; i++)//заполненение массива
  95.         {
  96.             int vr = rand();//записываем в буфер для возможности записи в два массива одно и того же числа
  97.             array1[i] = vr;
  98.             array2[i] = vr;
  99.         }
  100.  
  101.         time_start = clock();//Возвращает количество временных тактов, прошедших с начала запуска программы.
  102.         bubble(array2, lenght);//запуск сортировки пузырьков
  103.         end_time = clock() - time_start;//считаем сколько тиков прошла после запуска и вычитаем наш  time_start.
  104.                                         //Получаем время затраченное на сортировку
  105.         bsort = ((float)end_time) / CLOCKS_PER_SEC;//перевод тиков в секунды. Ниже используется тот же метод
  106.  
  107.         printf("\nВремя пузырька: %10f. Количество перестановок: %llu\n", bsort, counter_b);
  108.  
  109.         for (int i = 0; i < lenght; i++)//восстановление массива
  110.             array2[i] = array1[i];
  111.  
  112.         time_start = clock();
  113.         selection(array2, lenght);
  114.         end_time = clock() - time_start;
  115.         ssort = ((float)end_time) / CLOCKS_PER_SEC;
  116.  
  117.         printf("Время выбором:  %10f. Количество перестановок: %llu\n", ssort, counter_s);
  118.         for (int i = 0; i < lenght; i++)
  119.             array2[i] = array1[i];
  120.  
  121.         time_start = clock();
  122.         Qsort(array2, 0, lenght - 1);
  123.         end_time = clock() - time_start;
  124.         qsort = ((float)end_time) / CLOCKS_PER_SEC;
  125.  
  126.         printf("Время быстрой:  %10f. Количество перестановок: %llu\n", qsort, counter_q);
  127.  
  128.         printf("\nТоп по времени:\n");//вывод топа по затраченному времени
  129.         if (qsort < bsort && qsort < ssort)
  130.         {
  131.             printf("1) Быстрая: %10f\n", qsort);
  132.             if (bsort < ssort)
  133.                 printf("2) Пузырек: %10f\n3) Выбором: %10f\n", bsort, ssort);
  134.             else
  135.                 printf("2) Выбором: %10f\n3) Пузырек: %10f\n", ssort, bsort);
  136.         }
  137.         else if (bsort < qsort && bsort < ssort)
  138.         {
  139.             printf("1) Пузырек: %10f\n", bsort);
  140.             if (qsort < ssort)
  141.                 printf("2) Быстрая: %10f\n3) Выбором: %10f\n", bsort, ssort);
  142.             else
  143.                 printf("2) Выбором: %10f\n3) Быстрая: %10f\n", ssort, bsort);
  144.         }
  145.         else
  146.         {
  147.             printf("1) Выбором: %10f\n", bsort);
  148.             if (qsort < bsort)
  149.                 printf("2) Быстрая: %10f\n3) Пузырек: %10f\n", bsort, ssort);
  150.             else
  151.                 printf("2) Пузырек: %10f\n3) Быстрая: %10f\n", ssort, bsort);
  152.         }
  153.  
  154.         printf("\nТоп по числу перестановок:\n");//вывод топа по числу перстановок
  155.         if (counter_q < counter_b && counter_q < counter_s)
  156.         {
  157.             printf("1) Быстрая: %llu\n", counter_q);
  158.             if (counter_b < counter_s)
  159.             {
  160.                 printf("2) Пузырек: %llu\n", counter_b);
  161.                 printf("3) Выбором: %llu\n", counter_s);
  162.             }
  163.             else
  164.             {
  165.                 printf("2) Выбором: %llu\n", counter_s);
  166.                 printf("3) Пузырек: %llu\n", counter_b);
  167.             }
  168.         }
  169.         else if (counter_b < counter_q && counter_b < counter_s)
  170.         {
  171.             printf("1) Пузырек: %llu\n", counter_b);
  172.             if (counter_q < counter_s)
  173.             {
  174.                 printf("2) Быстрая: %llu\n", counter_q);
  175.                 printf("3) Выбором: %llu\n", counter_s);
  176.             }
  177.             else
  178.             {
  179.                 printf("2) Выбором: %llu\n", counter_s);
  180.                 printf("3) Быстрая: %llu\n", counter_q);
  181.             }
  182.         }
  183.         else
  184.         {
  185.             printf("1) Выбором: %llu\n", counter_b);
  186.             if (counter_q < counter_b)
  187.             {
  188.                 printf("2) Быстрая: %llu\n", counter_q);
  189.                 printf("3) Пузырек: %llu\n", counter_b);
  190.             }
  191.             else
  192.             {
  193.                 printf("2) Пузырек: %llu\n", counter_b);
  194.                 printf("3) Быстрая: %llu\n", counter_q);
  195.             }
  196.         }
  197.         med_qsort += qsort; med_counter_q += counter_q;//считаем сумму чтобы позже вычислить среднее значение
  198.         med_bsort += bsort; med_counter_b += counter_b;
  199.         med_ssort += ssort; med_counter_s += counter_s;
  200.         counter_q = 0; counter_b = 0; counter_s = 0;//обнуляем счетчики, чтобы записывать в них снова
  201.         loop++;//увеличиваем попытку
  202.     }
  203.     printf("\n\nСреднее значение равно:\n");
  204.     //подсчет среднего значения
  205.     med_bsort /= loop-1; med_counter_b /= loop-1;
  206.     med_ssort /= loop-1; med_counter_s /= loop-1;
  207.     med_qsort /= loop-1; med_counter_q /= loop-1;
  208.  
  209.     printf("Время пузырька: %10f. Количество перестановок: %llu\n", med_bsort, med_counter_b);
  210.     printf("Время выбором:  %10f. Количество перестановок: %llu\n", med_ssort, med_counter_s);
  211.     printf("Время быстрой:  %10f. Количество перестановок: %llu\n", med_qsort, med_counter_q);
  212.  
  213.     printf("\nТоп по времени:\n");//топ средних значений
  214.     if (med_qsort < med_bsort && med_qsort < med_ssort)
  215.     {
  216.         printf("1) Быстрая: %10f\n", med_qsort);
  217.         if (med_bsort < med_ssort)
  218.             printf("2) Пузырек: %10f\n3) Выбором: %10f\n", med_bsort, med_ssort);
  219.         else
  220.             printf("2) Выбором: %10f\n3) Пузырек: %10f\n", med_ssort, med_bsort);
  221.     }
  222.     else if (med_bsort < med_qsort && med_bsort < med_ssort)
  223.     {
  224.         printf("1) Пузырек: %10f\n", med_bsort);
  225.         if (med_qsort < med_ssort)
  226.             printf("2) Быстрая: %10f\n3) Выбором: %10f\n", med_bsort, med_ssort);
  227.         else
  228.             printf("2) Выбором: %10f\n3) Быстрая: %10f\n", med_ssort, med_bsort);
  229.     }
  230.     else
  231.     {
  232.         printf("1) Выбором: %10f\n", med_bsort);
  233.         if (med_qsort < med_bsort)
  234.             printf("2) Быстрая: %10f\n3) Пузырек: %10f\n", med_bsort, med_ssort);
  235.         else
  236.             printf("2) Пузырек: %10f\n3) Быстрая: %10f\n", med_ssort, med_bsort);
  237.     }
  238.  
  239.     printf("\nТоп по числу перестановок:\n");
  240.     if (med_counter_q < med_counter_b && med_counter_q < med_counter_s)
  241.     {
  242.         printf("1) Быстрая: %llu\n", med_counter_q);
  243.         if (med_counter_b < med_counter_s)
  244.         {
  245.             printf("2) Пузырек: %llu\n", med_counter_b);
  246.             printf("3) Выбором: %llu\n", med_counter_s);
  247.         }
  248.         else
  249.         {
  250.             printf("2) Выбором: %llu\n", med_counter_s);
  251.             printf("3) Пузырек: %llu\n", med_counter_b);
  252.         }
  253.     }
  254.     else if (med_counter_b < med_counter_q && med_counter_b < med_counter_s)
  255.     {
  256.         printf("1) Пузырек: %llu\n", med_counter_b);
  257.         if (med_counter_q < med_counter_s)
  258.         {
  259.             printf("2) Быстрая: %llu\n", med_counter_q);
  260.             printf("3) Выбором: %llu\n", med_counter_s);
  261.         }
  262.         else
  263.         {
  264.             printf("2) Выбором: %llu\n", med_counter_s);
  265.             printf("3) Быстрая: %llu\n", med_counter_q);
  266.         }
  267.     }
  268.     else
  269.     {
  270.         printf("1) Выбором: %llu\n", med_counter_b);
  271.         if (med_counter_q < med_counter_b)
  272.         {
  273.             printf("2) Быстрая: %llu\n", med_counter_q);
  274.             printf("3) Пузырек: %llu\n", med_counter_b);
  275.         }
  276.         else
  277.         {
  278.             printf("2) Пузырек: %u\n", med_counter_b);
  279.             printf("3) Быстрая: %u\n", med_counter_q);
  280.         }
  281.  
  282.         return 0;
  283.     }
  284. }
  285.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement