Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практики(Вариант №7) / Практическая работа №2.pdf
Скачиваний:
0
Добавлен:
23.02.2026
Размер:
437.64 Кб
Скачать

2 АЛГОРИТМИЧЕСКАЯ СЛОЖНОСТЬ

Алгоритм

Структура

Кол-во операций

 

Время

 

данных

 

 

 

 

 

 

 

 

 

 

 

 

В лучшем

В худшем

В лучшем

В худшем

 

 

 

 

 

 

Сортировка

Массив

1233

1339

0,06

0,010

расческой

 

 

 

 

 

 

 

 

 

 

 

Быстрая

Массив

606

561

0,239

0,192

сортировка

 

 

 

 

 

 

 

 

 

 

 

Пузырьковая

Массив

99

9900

0

0,030

сортировка

 

 

 

 

 

Таблица 1 — Сравнение средних значений алгоритмов

Исходя из данных, представленных в таблице, можно сделать вывод, что в лучшем исходе показания сортировок лучше, в отличие от худшего.

11

Заключение

В ходе выполнения практической работы было выявлено, что быстрая сортировка имеет наилучшую производительность O(n*logn)) и эффективна для любых размеров массива. Сортировка обменом O(n^2) крайне неэффективна для больших массивов. Сортировка расческой близка к O(n*logn), но уступает быстрой по скорости.

12

Приложение А

(обязательное) Сортировка расческой

using System;

using System.Diagnostics; class Program

{static void Main()

{int[] sizes = { 1, 2, 3, 4, 5, 10, 15, 20, 25, 30, 40, 50, 75, 100, 150, 200, 250, 300, 400, 500, 600, 800, 1000 };

Console.WriteLine("Размер\tВремя (мс)\tСравнения\tПерестановки\tВсего операций"); Console.WriteLine(new string('-', 60));

foreach (int size in sizes)

{float[] arr = new float[size]; Random random = new Random();

for (int i = 0; i < arr.Length; i++)

{ arr[i] = (float)(random.NextDouble() * 100);

}

float[] arrCopy = (float[])arr.Clone(); long comparisons = 0;

long swaps = 0;

Stopwatch stopwatch = new Stopwatch(); stopwatch.Start();

int n = arrCopy.Length; double factor = 1.2473309; int step = n - 1;

while (step >= 1)

{

for (int i = 0; i + step < n; i++)

 

 

{

comparisons++; // счетчик сравнений

 

 

 

 

if (arrCopy[i] > arrCopy[i + step])

 

 

{

swaps++; // счетчик перестановок

 

 

 

 

 

 

float temp = arrCopy[i];

 

 

 

arrCopy[i] = arrCopy[i + step];

 

 

}

arrCopy[i + step] = temp;

 

}

 

 

 

 

}

step = (int)(step / factor);

 

 

 

stopwatch.Stop(); Console.WriteLine($"{size}

\t{stopwatch.Elapsed.TotalMilliseconds:F6}\t{comparisons}\t\t{swaps}\t\t{comparisons + swaps}");

} } }

13

Приложение Б

(обязательное) Быстрая сортировка

using System;

using System.Diagnostics; class Program

{static long comparisons = 0; static long swaps = 0; static void Main()

{int[] sizes = { 1, 2, 3, 4, 5, 10, 15, 20, 25, 30, 40, 50, 75, 100, 150, 200, 250, 300, 400, 500, 600, 800, 1000 };

Console.WriteLine("Быстрая сортировка - Результаты:");

Console.WriteLine("Размер\tВремя (мс)\tСравнения\tПерестановки\tВсего

операций");

 

 

Console.WriteLine(new string('-', 60));

foreach (int size in sizes)

{

comparisons = 0;

 

 

swaps = 0;

 

float[] arr = new float[size];

 

Random random = new Random();

 

for (int i = 0; i < arr.Length; i++)

 

{

arr[i] = (float)(random.NextDouble() * 100);

 

}

 

 

 

float[] arrCopy = (float[])arr.Clone();

 

Stopwatch stopwatch = new Stopwatch();

 

stopwatch.Start();

 

quicksort(arrCopy, 0, arrCopy.Length - 1);

 

stopwatch.Stop();

Console.WriteLine($"{size} \t{stopwatch.Elapsed.TotalMilliseconds:F6}\t{comparisons}\t\t{swaps}\t\t{comparisons + swaps}");

} }

static void quicksort(float[] arr, int l, int r)

{comparisons++;

if (l >= r) return;

int i = l; int j = r;

float opora = arr[l + (r - l) / 2];

while (i <= j)

{

while (arr[i] < opora)

{

comparisons++; // счетчик для сравнения в while

 

 

14

 

 

 

}

i++;

 

 

 

 

 

 

 

 

 

while (arr[j] > opora)

 

 

 

 

{

comparisons++; // счетчик для сравнения в while

 

 

 

 

 

 

 

}

j--;

 

 

 

 

 

 

 

 

 

if (i <= j)

 

 

 

 

{

 

 

 

 

 

 

swaps++; // счетчик перестановок

 

 

 

 

float temp = arr[i];

 

 

 

 

arr[i] = arr[j];

 

 

 

 

 

arr[j] = temp;

 

 

 

 

 

i++;

 

 

 

 

}

j--;

 

 

 

}

 

 

 

 

 

 

 

 

 

if (l < j)

 

 

 

{

quicksort(arr, l, j);

// левая часть

 

 

}

 

 

 

 

 

 

 

if (i < r)

 

 

 

{

quicksort(arr, i, r);

// правая часть

 

 

}

 

}

 

 

 

}

 

 

 

 

 

 

 

 

 

15

Соседние файлы в папке Практики(Вариант №7)