Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Практическая работа №2

.pdf
Скачиваний:
0
Добавлен:
24.01.2025
Размер:
1.02 Mб
Скачать

1.4 Алгоритмическая сложность

Втаблице 1.4 представлено время выполнения алгоритмов,

реализованных в данной работе, количество операций в лучшем и худшем

случаях.

Таблица 1.4 – Алгоритмическая сложность

 

Номер

 

Лучший случай

Худший случай

 

 

 

 

 

измерения

 

 

 

 

 

Время выполнения, такт

 

 

 

 

 

 

 

 

 

1

 

35

47

 

 

 

 

 

 

2

 

37

49

 

 

 

 

 

 

3

 

37

48

 

 

 

 

 

Сортировка

4

 

35

50

расческой

 

 

 

 

5

 

38

52

 

 

 

 

 

 

 

 

Среднее значение

 

36,4

49,2

 

 

 

 

 

 

Количество

 

1251

1357

 

операций

 

 

 

 

 

 

 

 

 

 

 

1

 

22

23

 

 

 

 

 

 

2

 

29

33

 

 

 

 

 

 

3

 

23

31

 

 

 

 

 

Быстрая

4

 

36

44

сортировка

 

 

 

 

5

 

22

25

 

 

 

 

 

 

 

 

Среднее значение

 

26,4

31,2

 

 

 

 

 

 

Количество

 

984

1135

 

операций

 

 

 

 

 

 

 

 

 

 

 

11

 

 

Продолжение таблицы 1.4

 

1

143

277

 

 

 

 

 

2

143

277

 

 

 

 

 

3

136

274

 

 

 

 

Сортировка

4

147

299

обменом

 

 

 

5

142

289

 

 

 

 

 

 

Среднее значение

142,2

283,2

 

 

 

 

 

Количество

4950

9900

 

операций

 

 

 

 

 

 

 

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

12

Заключение

В ходе данной работы были оценена алгоритмическая сложность сортировки расческой, быстрой сортировки и сортировки обменом.

Результаты работы совпали с теоретическими. Отчет был написан согласно ОС ТУСУР 01-2021.

13

Приложение А

Сортировка расческой

int counter = 0;

void rascheska(float[] array, int length)

{

double factor = 1.2473309; int step = length - 1; counter++;

while (step >= 1)

{

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

{

counter++;

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

{

counter++;

float temp = array[i]; array[i] = array[i + step]; array[i + step] = temp;

}

}

counter++;

step = Convert.ToInt32(Math.Floor(step / factor));

}

}

void FillArray(float[] array, int length)

{

float a = 0.001f;

for (int i = 0; i < length; i++)

{

array[length - i - 1] = (length - i) * a * (-1);

}

}

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

float[] array; int l;

DateTime time1, time2;

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

{

l = lengths[i]; Console.Write($"{l}\t"); array = new float[l]; FillArray(array, l); time1 = DateTime.Now; rascheska(array, l); time2 = DateTime.Now;

Console.Write($"{counter}\t{time2.Ticks - time1.Ticks}\t"); counter = 0;

time1 = DateTime.Now; rascheska(array, l); time2 = DateTime.Now;

Console.Write($"{counter}\t{time2.Ticks - time1.Ticks}\n");

}

14

Приложение Б

Быстрая сортировка

int counter = 0;

void quickSort(float[] a, int l, int r)

{

float x = a[(l + r) / 2]; int i = l;

int j = r; counter++; while (i <= j)

{

counter++;

while (a[i] < x)

{

i++;

counter++;

}

counter++;

while (a[j] > x)

{

j--; counter++;

}

counter++; if (i <= j)

{

counter++;

float temp = a[i]; a[i] = a[j];

a[j] = temp; i++;

j--;

}

counter++;

}

counter++; if (i < r)

quickSort(a, i, r); counter++;

if (l < j)

quickSort(a, l, j);

}

void FillArray(float[] array, int length)

{

float a = 0.001f;

for (int i = 0; i < length; i++)

{

array[length - i - 1] = (length - i) * a * (-1);

}

}

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

float[] array; int l;

DateTime time1, time2;

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

{

l = lengths[i]; Console.Write($"{l}\t"); array = new float[l]; FillArray(array, l);

15

time1 = DateTime.Now; quickSort(array, 0, l - 1); time2 = DateTime.Now;

Console.Write($"{counter}\t{time2.Ticks - time1.Ticks}\t"); counter = 0;

time1 = DateTime.Now; quickSort(array, 0, l - 1); time2 = DateTime.Now;

Console.Write($"{counter}\t{time2.Ticks - time1.Ticks}\n"); counter = 0;

}

16

Приложение В

Сортировка обменом

int counter = 0;

void bubble(float[] array, int length)

{

for (int i = 0; i < length - 1; i++)

{

for (int j = 0; j < length - i - 1; j++)

{

counter++;

if (array[j] > array[j + 1])

{

counter++;

float temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp;

}

}

}

}

void FillArray(float[] array, int length) // функция для заполнения массива случайными числами

{

float a = 0.001f;

for (int i = 0; i < length; i++)

{

array[length - i - 1] = (length - i) * a * (-1);

}

}

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

float[] array; int l;

DateTime time1, time2;

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

{

l = lengths[i]; Console.Write($"{l}\t"); array = new float[l]; FillArray(array, l); time1 = DateTime.Now; bubble(array, l);

time2 = DateTime.Now; Console.Write($"{counter}\t{time2.Ticks - time1.Ticks}\t"); counter = 0;

time1 = DateTime.Now; bubble(array, l); time2 = DateTime.Now;

Console.Write($"{counter}\t{time2.Ticks - time1.Ticks}\n"); counter = 0;

}

17