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

144

Лекція 9. Алгоритми сортування

1. Сортування методом вставки

2. Сортування методом вибору

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

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

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

Алгоритм сортування — це алгоритм для впорядкування елементів в списку (масиві). У разі, коли елемент списку має декілька полів, поле, що служить критерієм порядку, називається ключем сортування.

Відомо багато методів сортування масиву, що відрізняються швидкодією й обсягом оперативної нам'яті, яка при цьому використовується.

Найбільш відомими елементарними методами сортування масиву є:

  • сортування вставкою (включенням);

  • сортування вибором;

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

З удосконалених методів сортування найчастіше використовуються:

  • швидке сортування, або метод Хоара;

  • сортування включенням зі спадним приростом, або метод Шелла;

  • сортування за допомогою дерева, або пірамідальне сортування;

  • сортування методом злиття.

Незважаючи на значну кількість алгоритмів сортування, з’являються нові алгоритми. Наприклад, відносно новим є алгоритм Timsort, який був опублікований у 2002 році Тімом Петерсом.

Це гібридний алгоритм, який поєднує сортування вставками і сортування злиттям. Зараз він є стандартним алгоритмом сортування в мові Python і реалізований в Android JDK 1.5.

Елементарні алгоритми сортування

1. Сортування методом вставки

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

Обчислювальна складність алгоритму О(n2), тобто, при збільшенні розміру масиву час роботи алгоритму зростає квадратично.

Опис алгоритму.

На кожному кроці цього методу масив розділений на дві частини: ліву, вже відсортовану, та праву, ще не відсортовану. Перший елемент правої частини вставляється до лівої частини так, щоб ліва частина залишалася відсортованою. У результаті відсортована частина збільшується на один елемент, а невідсортована на один елемент зменшується. Отже, на кожному кроці алгоритму сортування методом вставки слід виконати дві операції: пошук позиції для вставки елемента та власне його вставку із подальшим зсувом на одну позицію вправо від елементів відсортованої частини. Цей зсув «затре» перший елемент невідсортованого підмасиву останнім елементом відсортованого. Спочатку відсортованим підмасивом вважаємо перший елемент, а решту елементів масиву відносимо до невідсортованої частини.

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

Опис алгоритму на псевдокоді (алгоритм Вірта)

for i = 1 to n-1 do

x = A[i]

j = i

while (j > 0 and A[j-1] > x) do

A[j] = A[j-1]

j = j - 1

end while

A[j] = x

end for[6]

Приклад 1. Сортування методом вставки на C#

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Lab11_Sort

{

class Program

{

static void Insertion (int [] a)

{

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

int key,j;

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

{

key = a[i];

j = i;

while (j > 0 && a[j-1] > key)

{

a[j] = a[j-1];

j = j - 1;

}

a[j] = key;

}

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

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

Console.Write(a[i]);

}

static void Main(string[] args)

{

int[] mas = {5,2,4,6,1,3};

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

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

Console.Write(mas[i]);

Console.WriteLine();

Insertion(mas);

Console.ReadKey();

}

}

}