/
junjun_45
/
cvb
Обзор
Документация
Войти
/
junjun_45
/
cvb
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
ConsoleApp1k/ConsoleApp1/Program.cs
121 строка
6 KB
junjun_45
first_commit
27 ноя 2024, 11:10
27 ноя 2024, 11:10
2f07ae1
Код
Авторство
О чём код?
using System; using System.Diagnostics; using System.IO; using System.Reflection; namespace BubbleSort { class Program { /// <summary> /// Генератор псевдослучайных чисел /// </summary> static readonly Random random = new Random(); /// <summary> /// Объект для измерение интервалов времени /// </summary> static readonly Stopwatch watch = new Stopwatch(); /// <summary> /// Генерация стучайного массива нужной длины /// </summary> /// <param name="size_of_array"></param> /// <returns></returns> static int[] InitArray(int size_of_array, int MinValue = 0, int MaxValue = 100) { var array = new int[size_of_array]; for (int i = 0; i < array.Length; i++) array[i] = random.Next(MinValue, MaxValue); return array; } /// <summary> /// Печать массива в консоль, в строку /// </summary> /// <param name="array">Массив</param> static void PrintArray(int[] array) { foreach (var item in array) Console.Write("{0} ", item); Console.WriteLine(); } /// <summary> /// Реализация обычного неоптимального метода пузырьковой сортировки /// </summary> /// <param name="array">Исходный случайный массив</param> /// <returns>Время, в миллисекундах, затраченное на сортировку</returns> static long BubbleSort(int[] array) { var _inner = new int[array.Length]; array.CopyTo(_inner, 0); //Копирование исходного массива во внутренний. Простое присвоение даёт лишь уравнивание ссылок. watch.Restart();//Запуск таймера измерения времени. for (int i = 0; i < _inner.Length -1; i++) for (int j = 0; j < _inner.Length; j++) if (_inner[j] > _inner[j + 1]) { //Перестановка значений элементов массива посредством кортежа (для VS 2023 и далее). //Замените на классическую перестановку через третью пременную, если не компилируется. (_inner[j + 1], _inner[j]) = (_inner[j], _inner[j + 1]); } watch.Stop();//Остановка таймера return watch.ElapsedMilliseconds;//время, затраченное на сортировку, мс } /// <summary> /// Реализация обычного оптимизированного метода пузырьковой сортировки /// </summary> /// <param name="array">Исходный случайный массив</param> /// <returns>Время, в миллисекундах, затраченное на сортировку</returns> static long BubbleSort2(int[] array) { var _inner = new int[array.Length]; array.CopyTo(_inner, 0); //Копирование исходного массива во внутренний. Простое присвоение даёт лишь уравнивание ссылок. watch.Restart();//Запуск таймера измерения времени. for (int i = 0; i < _inner.Length; i++) for (int j = 0; j < _inner.Length - 1 - i; j++) if (_inner[j] > _inner[j + 1]) { //Перестановка значений элементов массива посредством кортежа (для VS 2023 и далее). //Замените на классическую перестановку через третью пременную, если не компилируется. (_inner[j + 1], _inner[j]) = (_inner[j], _inner[j + 1]); } watch.Stop();//Остановка таймера return watch.ElapsedMilliseconds;//время, затраченное на сортировку, мс } /// <summary> /// Метод, реализующий вычислительный эксперимент. /// </summary> /// <param name="start_size">Начальное значение количества элементов в массиве</param> /// <param name="increment">Шаг увеличения числа элементов в массиве</param> /// <param name="point_count">Сколько раз увеличиваем массив (число точек графика)</param> /// <param name="OutFilename">Имя файла с результатами моделирования</param> static void Experiment(int start_size, int increment, int point_count, string OutFilename) { Console.WriteLine("Начало эксперимента"); int size = start_size; using (StreamWriter writer = File.CreateText(OutFilename)) { for (int i = 0; i < point_count - 1; i++) { var array = InitArray(size, -1000000, 1000000);//Генерация случайного массива var t1 = BubbleSort(array); var t2 = BubbleSort2(array); //writer.WriteLine($"{size} {t1}"); writer.WriteLine($"{size} {t1} {t2}"); //Console.WriteLine($"{size} {t1}"); Console.WriteLine($"{size} {t1} {t2} ({100 * (t2 - t1) / t1}%)"); size += increment; } } Console.WriteLine("Завешено"); } static void Main() { try { Experiment(1000, 500, 35, ""); } catch (Exception e) { Console.WriteLine(e.Message); } } } }