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

СДлб2

.pdf
Скачиваний:
2
Добавлен:
27.11.2022
Размер:
1.06 Mб
Скачать

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

После постройки графиков были проведены исследования на худший и лучший случай для каждой сортировки на массиве из 100 элементов, было проведено по 5 экспериментов для каждой.

Результаты для быстрой сортировки представлены в Таблице 1.

Случай

 

1

2

3

4

5

 

 

 

 

 

 

 

Худший

Кол-во

10197

10197

10197

10197

10197

 

операций

 

 

 

 

 

 

 

 

 

 

 

 

 

Время в

380

378

369

369

463

 

тактах

 

 

 

 

 

 

 

 

 

 

 

 

Лучший

Кол-во

1184

1184

1184

1184

1184

 

операций

 

 

 

 

 

 

 

 

 

 

 

 

 

Время в

174

173

213

198

179

 

тактах

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 1-Результаты для быстрой сортировки

 

Результаты для сортировки расческой представлены в Таблице 2.

 

 

 

 

 

 

 

 

Случай

 

1

2

3

4

5

 

 

 

 

 

 

 

Худший

Кол-во

9874

9874

9874

9874

9874

 

операций

 

 

 

 

 

 

 

 

 

 

 

 

 

Время в

378

369

363

380

372

 

тактах

 

 

 

 

 

 

 

 

 

 

 

 

Лучший

Кол-во

1381

1381

1381

1381

1381

 

операций

 

 

 

 

 

 

 

 

 

 

 

 

 

Время в

213

174

179

174

198

 

тактах

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 2-Результаты для сортировки расческой

 

Результаты для сортировки обменом представлены в Таблице 3.

11

Случай

 

1

2

3

4

5

 

 

 

 

 

 

 

Худший

Кол-во

10000

10000

10000

10000

10000

 

операций

 

 

 

 

 

 

 

 

 

 

 

 

 

Время в

356

340

330

293

304

 

тактах

 

 

 

 

 

 

 

 

 

 

 

 

Лучший

Кол-во

100

100

100

100

100

 

операций

 

 

 

 

 

 

 

 

 

 

 

 

 

Время в

133

194

163

170

154

 

тактах

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 3-Результаты для сортировки обменом

 

Для лучшего случая лучшей сортировкой является сортировка обменом,

так как сортировка обменом быстро проходит по всем значениям и не возвращается.

12

Заключение

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

Была проделана работа по написанию автоматического создания массивов разной длинны, подсчетов времени работысортировок и упорядоченного вывода результатов в консоль.

Были проведены эксперименты с худшим и лучшим случаем сортировки, по ним был написан вывод.

13

Приложение А

(обязательное)

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

using System;

using System.Diagnostics; namespace SD2

{

class Program

{

static public Stopwatch Time = new Stopwatch(); static int action = 0;

private static float[] AlgFS(float[] array, int minIndex, int maxIndex)

{

if (minIndex >= maxIndex)

{

return array;

}

action++;

int pivotIndex = Medium(array, minIndex, maxIndex); AlgFS(array, minIndex, pivotIndex - 1); AlgFS(array, pivotIndex + 1, maxIndex);

return array;

}

private static int Medium(float[] array, int minIndex, int maxIndex)

{

int pivot = minIndex - 1;

for (int i = minIndex; i <= maxIndex; i++)

{

if (array[i] < array[maxIndex])

{

pivot++;

action++;

AlgSwap(ref array[pivot], ref array[i]);

}

action++;

}

pivot++;

action++;

AlgSwap(ref array[pivot], ref array[maxIndex]); return pivot;

}

private static void AlgSwap(ref float left, ref float right)

{

float temp = left; left = right; right = temp;

}

static void Main()

{

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

Random rand = new Random();

for (int j = 0; j < size.Length; j++)

{

int n = size[j];

float[] array = new float[n]; for (int i = 0; i < n; i++)

{

array[i] = rand.Next(-999999, -1)/100f;

}

Time.Start();

float[] sortedArray = AlgFS(array, 0, array.Length - 1);

Time.Stop();

14

Console.WriteLine("array length {0}: time {1}, action {2} ", n, Time.ElapsedTicks, action);

}

}

}

}

15

Приложение Б

(обязательное)

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

using System;

using System.Diagnostics;

namespace SD2_1

{

class Program

{

public static Stopwatch Timer = new Stopwatch(); public static Random rand = new Random(); static void Main(string[] args)

{

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

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

{

AlgS(array[i]);

}

}

static void AlgS(int n)

{

int[] array = new int[n];

Timer.Start();

double factor = 1.2473309; int step = n - 1;

int action = 0; while (step >= 1)

{

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

{

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

{

int temp = array[i];

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

action ++;

}

action++;

}

step = (int)(step / factor);

}

Timer.Stop();

Console.WriteLine("array length {0}: time {1}, action {2} ", n, Timer.ElapsedTicks, action);

}

}

}

16

Приложение В

(обязательное)

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

using System;

using System.Diagnostics;

namespace SD2_2

{

class Program

{

public static Stopwatch Timer = new Stopwatch(); public static Random rand = new Random(); static void Main(string[] args)

{

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

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

{

AlgSwapSort(array[i]);

}

}

static void AlgSwapSort(int n)

{

float[] array = new float[n]; Timer.Start();

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

{

array[i] = rand.Next(-999999, -1) / 100f;

}

int action = 0; float temp;

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

{

for (int j = i + 1; j < array.Length; j++)

{

if (array[i] > array[j])

{

temp = array[i]; array[i] = array[j]; array[j] = temp; action++;

}

action++;

}

}

Timer.Stop();

Console.WriteLine("array length {0}: time {1}, action {2} ", n, Timer.ElapsedTicks, action);

}

}

}

17

Соседние файлы в предмете Структуры данных