Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритми та структури даних ЗПІ-91-20210115T104612Z-001 / Лекція 9. Алгоритми сортування.docx
Скачиваний:
47
Добавлен:
15.01.2021
Размер:
96.54 Кб
Скачать

5. Оцінювання часу роботи алгоритму

Час виконання (процесорний час) можна обчислити з використанням класу Stopwatch з простору System.Diagnostics.

Приклад. Обчислення часу роботи програми з використанням класу Stopwatch

Stopwatch sw = new Stopwatch();

sw.Start();

// Виклик_обчислювальної_процедури;

sw.Stop();

TimeSpan ts = sw.Elapsed;

Console.WriteLine("Total time: {0}", ts.TotalMilliseconds);

При оцінці продуктивності необхідно врахувати, що час виконання алгоритму залежить від багатьох параметрів. Тому бажано оцінювати середній час виконання при декількох прогонах алгоритму, виключаючи перший прогін.

Приклад 6. Реалізація алгоритмів швидкого сортування та бульбашкового та обчислення часу їх роботи.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Diagnostics;

namespace QuickSort

{

class QuickSorting

{

public static void sorting(double[] arr, long first, long last)

{

//Швидке сортування Хоара

double p = arr[(last - first) / 2 + first];

double temp;

long i = first, j = last;

while (i <= j)

{

while (arr[i] < p && i <= last) ++i;

while (arr[j] > p && j >= first) --j;

if (i <= j)

{

temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

++i; --j;

}

}

if (j > first) sorting(arr, first, j);

if (i < last) sorting(arr, i, last);

}

}

class BoobleSort

{

public static void BubSort(double[] a)

{

//Сортування обміном (бульбашки)

double temp;

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

for (int j = 0; j < a.Length - i; j++)

// сравнить и переставить элементы

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

{

temp = a[j];

a[j] = a[j + 1];

a[j + 1] = temp;

}

}

}

class Program

{

static void GenMas(double[] arr, int n)

{

Random rd = new Random();

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

{

arr[i] = rd.Next(1, 101);

}

Console.WriteLine("Початковий масив:" + n);

foreach (double x in arr)

{

Console.Write(x + " ");

}

Console.WriteLine();

}

static void Main(string[] args)

{

double[] arr1 = new double[100];

double[] arr2 = new double[100];

GenMas(arr1,1);

GenMas(arr2,2);

Stopwatch sw1 = new Stopwatch();

sw1.Start();

//Швидке сортування

QuickSorting.sorting(arr1, 0, arr1.Length - 1);

sw1.Stop();

TimeSpan ts1 = sw1.Elapsed;

Console.WriteLine("Час роботи швидкого сорт.: {0}", ts1.TotalMilliseconds);

Console.WriteLine("Відсортований масив:");

foreach (double x in arr1)

{

Console.Write(x + " ");

}

Console.WriteLine();

//----------------------------------------------

//Сортування обміном (бульбашки)

Stopwatch sw2 = new Stopwatch();

sw2.Start();

BoobleSort.BubSort(arr2);

sw2.Stop();

TimeSpan ts2 = sw2.Elapsed;

Console.WriteLine("Час роботи бульбашки.: {0}", ts2.TotalMilliseconds);

Console.WriteLine("Відсортований масив");

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

Console.Write(arr2[i] + " ");

Console.WriteLine();

Console.ReadKey();

}

}

}

Асимптотична складність алгоритмів сортування масивів

https://habrahabr.ru/post/188010/

Алгоритм

Асимптотична (часова) складність алгоритмів

Кращий час

У середньому

Гірший час

Швидке сортування Хоара

O(n*log(n))

O(n*log(n))

O(n2)

Сортування злиттям

O(n*log(n))

O(n*log(n))

O(n*log(n))

Сортування вставками

O(n)

O(n2)

O(n2)

Сортування вибором

O(n2)

O(n2)

O(n2)

Сортуванням обміном (бульбашкове)

O(n)

O(n2)

O(n2)

Сортування TimSort

O(n)

O(n*log(n))

O(n*log(n))

Рис. 1 Графіки функцій асимптотичної складності