Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <time.h>//для рандомных элементов, а также для замера времени (clock())
- #include <stdio.h> //чтение и печать сообщений, циклы
- #include <stdlib.h> //прерывание программы>
- #include <locale.h> //русский язык в visual stidia
- unsigned long long counter_b = 0;//счетчик перестановк в пузырьке
- unsigned long long counter_q = 0;//счетчик перестановк в быстрой
- unsigned long long counter_s = 0;//счетчик перестановк в выборе
- void bubble(int array[], int lenght)// сортировка пузырьком
- {
- int vr = 0;
- for (int i = 0; i < lenght - 1; i++)
- {
- for (int j = lenght - 2; j >= i; j--)
- {
- if (array[j] > array[j + 1])
- {
- vr = array[j];
- array[j] = array[j + 1];
- array[j + 1] = vr;
- counter_b++;
- }
- }
- }
- }
- void Qsort(int array[], int first, int last)//быстрая
- {
- int l, r, vr, x;
- if (first < last)
- {
- x = array[(last + first) / 2];
- l = first; r = last;
- while (l <= r)
- {
- while (array[l] < x)l++;
- while (array[r] > x)r--;
- if (l <= r)
- {
- counter_q++;
- vr = array[l];
- array[l] = array[r];
- array[r] = vr;
- l++; r--;
- }
- }
- Qsort(array, first, r);
- Qsort(array, l, last);
- }
- }
- void selection(int array[], int lenght)//выбора
- {
- int vr;
- for (int i = 0; i < lenght - 2; i++)
- for (int j = i + 1; j < lenght - 1; j++)
- if (array[i] > array[j])
- {
- vr = array[j];
- array[j] = array[j + 1];
- array[j + 1] = vr;
- counter_s++;
- }
- }
- int main()
- {
- setlocale(LC_ALL, "Russian");//русифакатор. Нужно только в visual studia. Удалить в других компиляторах
- srand(time(0));//разные значения каждый раз
- const int lenght = 100000;//длина массива
- int array1[lenght];//начальный массив
- int array2[lenght];//копия, для возможности сортировки несколько раз
- printf("Это программа сравнения метода сортировок «быстрой сортировки» и метода «пузырька» , а также выбора, и сопоставить их эффективность.\n");
- printf("Проводим расчеты. Массив состоит из 100000 элементов\n");
- clock_t time_start;//начало замера времени
- clock_t end_time;//конец замер времени
- float qsort;//количество времени затраченное на быструю
- float bsort;//количество времени затраченное на пузырек
- float ssort;//количество времени затраченное на выбора
- //средние значения
- float med_qsort = 0; unsigned long long med_counter_q = 0;//быстрая
- float med_bsort = 0; unsigned long long med_counter_b = 0;//пузырек
- float med_ssort = 0; unsigned long long med_counter_s = 0;//выбора
- int loop = 1;//переменая отвечающая за количество повторов, а также порядок попыток
- while (loop != 5)
- {
- printf("\nПопытка %d\n", loop);
- for (int i = 0; i < lenght; i++)//заполненение массива
- {
- int vr = rand();//записываем в буфер для возможности записи в два массива одно и того же числа
- array1[i] = vr;
- array2[i] = vr;
- }
- time_start = clock();//Возвращает количество временных тактов, прошедших с начала запуска программы.
- bubble(array2, lenght);//запуск сортировки пузырьков
- end_time = clock() - time_start;//считаем сколько тиков прошла после запуска и вычитаем наш time_start.
- //Получаем время затраченное на сортировку
- bsort = ((float)end_time) / CLOCKS_PER_SEC;//перевод тиков в секунды. Ниже используется тот же метод
- printf("\nВремя пузырька: %10f. Количество перестановок: %llu\n", bsort, counter_b);
- for (int i = 0; i < lenght; i++)//восстановление массива
- array2[i] = array1[i];
- time_start = clock();
- selection(array2, lenght);
- end_time = clock() - time_start;
- ssort = ((float)end_time) / CLOCKS_PER_SEC;
- printf("Время выбором: %10f. Количество перестановок: %llu\n", ssort, counter_s);
- for (int i = 0; i < lenght; i++)
- array2[i] = array1[i];
- time_start = clock();
- Qsort(array2, 0, lenght - 1);
- end_time = clock() - time_start;
- qsort = ((float)end_time) / CLOCKS_PER_SEC;
- printf("Время быстрой: %10f. Количество перестановок: %llu\n", qsort, counter_q);
- printf("\nТоп по времени:\n");//вывод топа по затраченному времени
- if (qsort < bsort && qsort < ssort)
- {
- printf("1) Быстрая: %10f\n", qsort);
- if (bsort < ssort)
- printf("2) Пузырек: %10f\n3) Выбором: %10f\n", bsort, ssort);
- else
- printf("2) Выбором: %10f\n3) Пузырек: %10f\n", ssort, bsort);
- }
- else if (bsort < qsort && bsort < ssort)
- {
- printf("1) Пузырек: %10f\n", bsort);
- if (qsort < ssort)
- printf("2) Быстрая: %10f\n3) Выбором: %10f\n", bsort, ssort);
- else
- printf("2) Выбором: %10f\n3) Быстрая: %10f\n", ssort, bsort);
- }
- else
- {
- printf("1) Выбором: %10f\n", bsort);
- if (qsort < bsort)
- printf("2) Быстрая: %10f\n3) Пузырек: %10f\n", bsort, ssort);
- else
- printf("2) Пузырек: %10f\n3) Быстрая: %10f\n", ssort, bsort);
- }
- printf("\nТоп по числу перестановок:\n");//вывод топа по числу перстановок
- if (counter_q < counter_b && counter_q < counter_s)
- {
- printf("1) Быстрая: %llu\n", counter_q);
- if (counter_b < counter_s)
- {
- printf("2) Пузырек: %llu\n", counter_b);
- printf("3) Выбором: %llu\n", counter_s);
- }
- else
- {
- printf("2) Выбором: %llu\n", counter_s);
- printf("3) Пузырек: %llu\n", counter_b);
- }
- }
- else if (counter_b < counter_q && counter_b < counter_s)
- {
- printf("1) Пузырек: %llu\n", counter_b);
- if (counter_q < counter_s)
- {
- printf("2) Быстрая: %llu\n", counter_q);
- printf("3) Выбором: %llu\n", counter_s);
- }
- else
- {
- printf("2) Выбором: %llu\n", counter_s);
- printf("3) Быстрая: %llu\n", counter_q);
- }
- }
- else
- {
- printf("1) Выбором: %llu\n", counter_b);
- if (counter_q < counter_b)
- {
- printf("2) Быстрая: %llu\n", counter_q);
- printf("3) Пузырек: %llu\n", counter_b);
- }
- else
- {
- printf("2) Пузырек: %llu\n", counter_b);
- printf("3) Быстрая: %llu\n", counter_q);
- }
- }
- med_qsort += qsort; med_counter_q += counter_q;//считаем сумму чтобы позже вычислить среднее значение
- med_bsort += bsort; med_counter_b += counter_b;
- med_ssort += ssort; med_counter_s += counter_s;
- counter_q = 0; counter_b = 0; counter_s = 0;//обнуляем счетчики, чтобы записывать в них снова
- loop++;//увеличиваем попытку
- }
- printf("\n\nСреднее значение равно:\n");
- //подсчет среднего значения
- med_bsort /= loop-1; med_counter_b /= loop-1;
- med_ssort /= loop-1; med_counter_s /= loop-1;
- med_qsort /= loop-1; med_counter_q /= loop-1;
- printf("Время пузырька: %10f. Количество перестановок: %llu\n", med_bsort, med_counter_b);
- printf("Время выбором: %10f. Количество перестановок: %llu\n", med_ssort, med_counter_s);
- printf("Время быстрой: %10f. Количество перестановок: %llu\n", med_qsort, med_counter_q);
- printf("\nТоп по времени:\n");//топ средних значений
- if (med_qsort < med_bsort && med_qsort < med_ssort)
- {
- printf("1) Быстрая: %10f\n", med_qsort);
- if (med_bsort < med_ssort)
- printf("2) Пузырек: %10f\n3) Выбором: %10f\n", med_bsort, med_ssort);
- else
- printf("2) Выбором: %10f\n3) Пузырек: %10f\n", med_ssort, med_bsort);
- }
- else if (med_bsort < med_qsort && med_bsort < med_ssort)
- {
- printf("1) Пузырек: %10f\n", med_bsort);
- if (med_qsort < med_ssort)
- printf("2) Быстрая: %10f\n3) Выбором: %10f\n", med_bsort, med_ssort);
- else
- printf("2) Выбором: %10f\n3) Быстрая: %10f\n", med_ssort, med_bsort);
- }
- else
- {
- printf("1) Выбором: %10f\n", med_bsort);
- if (med_qsort < med_bsort)
- printf("2) Быстрая: %10f\n3) Пузырек: %10f\n", med_bsort, med_ssort);
- else
- printf("2) Пузырек: %10f\n3) Быстрая: %10f\n", med_ssort, med_bsort);
- }
- printf("\nТоп по числу перестановок:\n");
- if (med_counter_q < med_counter_b && med_counter_q < med_counter_s)
- {
- printf("1) Быстрая: %llu\n", med_counter_q);
- if (med_counter_b < med_counter_s)
- {
- printf("2) Пузырек: %llu\n", med_counter_b);
- printf("3) Выбором: %llu\n", med_counter_s);
- }
- else
- {
- printf("2) Выбором: %llu\n", med_counter_s);
- printf("3) Пузырек: %llu\n", med_counter_b);
- }
- }
- else if (med_counter_b < med_counter_q && med_counter_b < med_counter_s)
- {
- printf("1) Пузырек: %llu\n", med_counter_b);
- if (med_counter_q < med_counter_s)
- {
- printf("2) Быстрая: %llu\n", med_counter_q);
- printf("3) Выбором: %llu\n", med_counter_s);
- }
- else
- {
- printf("2) Выбором: %llu\n", med_counter_s);
- printf("3) Быстрая: %llu\n", med_counter_q);
- }
- }
- else
- {
- printf("1) Выбором: %llu\n", med_counter_b);
- if (med_counter_q < med_counter_b)
- {
- printf("2) Быстрая: %llu\n", med_counter_q);
- printf("3) Пузырек: %llu\n", med_counter_b);
- }
- else
- {
- printf("2) Пузырек: %u\n", med_counter_b);
- printf("3) Быстрая: %u\n", med_counter_q);
- }
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement