Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 2

Лабораторна робота # 8

«АЛГОРИТМИ СОРТУВАННЯ. ШВИДКЕ СОРТУВАННЯ»


Пишіть код так, начебто його супроводжувати
буде схильний до насильства психопат,
який знає, де ви мешкаєте.
Мартін Голдінг
Мета роботи: Навчитися використовувати процедуру швидкого сортування для аналізу
даних.
ТЕОРЕТИЧНІ ВІДОМОСТІ

Рішення завдання сортування даних (sorting problem) потребує їх


перегрупування в заданому порядку. Задаємо порядок сортування – відсортувати
послідовність чисел в порядку зростання. На вхід подається послідовність чисел a1, a2,
…,a n. На виході отримуємо відсортовану послідовність b1, b2, …,bn в порядку b1 ≤ b2
≤…bn.
Швидке сортування – рекурсивний алгоритм сортування вхідних даних й має
псевдокод [1].

На вхід подається послідовність чисел A[1..n], ключовою в швидкому сортуванні


є процедура PARTITION, що змінює порядок елементів в масиві A[p..r], без залучення
додаткової пам’яті. Дії алгоритму в наступному – обирається x=A[r] в якості опорного
(pivot) елемента, відносно якого масив перегруповується: зліва від pivot отримаємо
підмасив A[p, q – 1], всі елементи якого менші або дорівнюють опорному, а справа –
A[p, q – 1], що містить елементи значення більші pivot. Надалі до підмасивів
визивається рекурсивно PARTITION. По закінченню дії Quicksort маємо відсортовану
послідовність чисел.
Аналіз алгоритму. Асимптотичні оцінки – O(n2); θ(nlog2n); Ω(nlog2n). Алгоритм
додаткової пам’яті не потребує, перегрупування чисел відбувається в межах заданого
масиву, то ж об’єм оперативної пам’яті не перевищує деяку постійну величину.
ЗАВДАННЯ ЛАБОРОТОРНОЇ РОБОТИ

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


степені упорядкованості елементів в масиві. Написати програму (функцію main), що
містить опис даних та алгоритм сортування.
Виконати алгоритм для числа вхідних даних – n = 10, 100, 1000, 5000, 10000 елементів,
згенерувавши три види різних послідовностей – випадкову, зростаючу, спадаючу.
2. Для кожного виду послідовності та кількості елементів визначити час сортування та
кількість операцій присвоювань та перестановок.
3. Вивести в консоль результати досліджень.
4. Звести результати до таблиці та зробити висновки.

Рекомендації до виконання практичної роботи (необов’язкові )


Комп’ютерна реалізація може бути виконана за допомогою будь-якої мови
програмування. Код програми та його виконання перевіряється викладачем та
пояснюється студентом при здачі лабораторної роботи.
Наприклад, студент сам обирає за допомогою чого він початково формує
структуру даних – або з використанням масиву, або списку, або використовує
стандарті бібліотеки.
Для генерації випадкових чисел рекомендуємо використовувати функцію (при
програмуванні на мові С++)
#include <stdlib.h>
#include <time.h>
srand (час (NULL)); // Ініціалізація функції ранд значенням функції часу
  INT секрет = рандів ()% 1000000 + 1; // Згенерувати випадкове число від 1 до 1000000
#include <stdlib.h>

#include <time.h>

srand(time(NULL)); // ініціалізація функції rand значеннями функції time

int secret = rand() % 1000000 + 1; // згенерувати випадкове число від 1 до 1000000

Вимоги до оформлення звіту


Звіт повинен складатися з 4 частин:
1. Титульна сторінка із зазначенням номера та теми лабораторної роботи, групи,
прізвища та варіанта студента.
2. Завдання лабораторної роботи.
3. Програмний код, написаний в рамках виконання завдання.
4. Скріншоти, що демонструють роботу основних складових програми.
Звіт зберігається в електронному варіанті.

1. Алгоритмы: построение и анализ, 3-е издание/ Т. Кормен, Ч. Лейзерсон,Р


Риверст, К. Штайн – М.: Вильямс, 2013. – 1328 с.

You might also like