СДлб2
.pdf3 Худший и лучший случай
После постройки графиков были проведены исследования на худший и лучший случай для каждой сортировки на массиве из 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