Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4_Метод_вказівки_лаб_роб_Алгор_та_структ..doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
149.5 Кб
Скачать

Лабораторна робота №5

.

Тема: "Сортування масиву методом вставки"

Ціль:

Познайомитися з алгоритмами вставки і сортування;

Завдання:

Сформувати масив з 100 випадкових чисел і провести його сортування методом вставки

Теоретичні відомості про алгоритми вставки і сортування:

1. Методи вставки. Алгоритм простих вставок.

Нижче описаний основний алгоритм простих вставок, що породжує кілька модифікацій, використовуваних у завданнях. Алгоритм використовує прийом, яким користаються гравці в карти при сортуванні тільки що розданої колоди: чергова карта вставляється між вже упорядкованими раніше.

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

Тут k[1], k[2], ..., k[N] - ключі, по яких виробляється упорядкування файлу. X,і,j – робочі перемінні.

┌──────── for j=2 to N ───────────┐

│ i=j-1; │

│ X=k[j]; │

│┌─────while (X< k[i]) & (i>0)──┐ │

││ k[i+1]=k[i]; │ │

││ i=i-1; │ │

│└──────────────────────────────┘ │

│ k[i+1]=X; │

└─────────────────────────────────┘

Для приклада візьмемо файл, що складається з 8 елементів:

Вих.файл.: 503 87 512 61 908 170 897 275

Алгоритм буде перетворювати його в такий спосіб:

j=2. Вих : 503 87 X=87

Рез : °87 503

j=3 : 87 503 °512 X=512

j=4 : °61 87 503 512 X=61

j=5 : 61 87 503 512 °908 X=908

j=6 : 61 87 °170 503 512 908 X=170

j=7 : 61 87 170 503 512 °897 908 X=897

j=8 : 61 87 170 °275 503 512 897 908 X=275

Час роботи алгоритму t приблизно оцінюється формулою:

t=a*N¤+ b*N

де a,b - невідомі константи, що залежать від програмної реалізації алгоритму.

Модифікації алгоритму простих вставок.

1.1. Бінарні вставки

Для прискорення числа порівнянь при пошуку місця, у яке потрібно вставити елемент X, можна використовувати логарифмічний пошук. Це означає, що спочатку Х порівнюється з елементом k[j/2], потім, у залежності від результату порівняння, з елементом, що лежить посередине між 1 і j/2 чи посередине між j/2+1 і j і т.і. При цьому число порівнянь для кожного j дорівнює приблизно log(j). Число пересилань елементів при цьому не змінюється і залишається приблизно рівним N¤/4.

Схема алгоритму бінарних вставок може бути отримана невеликою модифікацією схеми з розділу 6.4.

Час роботи алгоритму t приблизно оцінюється формулою:

t=a*N¤ + b*N + c*N*log

де a,b,c-невідомі константи, що залежать від програмної реалізації алгоритму.

1.2. Двухпутьові вставки

Число пересилань можна скоротити приблизно в 2 рази до N/8, якщо допустити зрушення елементів не тільки вправо, але і вліво. Для вихідного файлу резервується місце в пам'яті, рівне 2N+1 ,де N - число елементів у вихідному файлі. Перший елемент пересилається в середину вихідного файлу. Надалі елементи вихідного файлу зрушуються чи вправо вліво в залежності від того, у яку сторону потрібно зрушувати менше елементів. Файл із попереднього приклада буде сортуватися в такий спосіб.

Вих.файл.: 503 87 512 61 908 170 897 275

503 поч. стан

°87 503 Х=87

87 503 °512 Х=512

°61 87 503 512 Х=61

61 87 503 512 °908 Х=908

61 87 °170 503 512 908 Х=170

61 87 170 503 512 °897 908 Х=897

61 87 170 °275 503 512 897 908 Х=275

З таблиці видно, що приєднання нових елементів до вихідного файлу відбувається як праворуч, так і ліворуч від центрального елемента 503 з можливим зрушенням чи вправо вліво. Час роботи алгоритму t приблизно оцінюється формулою:

t=a*N¤ + b*N

де a,b - невідомі константи, що залежать від програмної реалізації алгоритму.

1.3. Вставки одночасно декількох елементів.

Модифікація методу простих уставок полягає в тім, що замість однієї перемінної Х можна використовувати трохи перемінних Х1, Х2, ... Xm, що мають значення елементів, що підлягають вставці у вже упорядковану частину файлу. Х1, X2, ... Xm упорядковані по зростанню, тому порівнюючи Xm у циклі по перемінної і з елементами упорядкованої частини, ми можемо гарантувати, що, якщо черговий елемент k[і] більше Xm, те він більше й інших елементів. Перенос елементів вихідного файлу вперед у циклі по і виконується на m елементів, тобто замість k[і+1]=k[і] у вихідному алгоритмі в модифікованому алгоритмі записується k[і+m]=k[і]. При перебуванні k[і] такого, що він менше Хm, Хm ставиться на місце k[і+m] і m зменшується на 1. Далі цикл по і продовжується з новим m. Економія числа переносів елементів досягається за рахунок переносів відразу на m елементів.

Час роботи алгоритму t приблизно оцінюється формулою:

t=a*N + b*N + c*N*log

де a,b,c - невідомі константи, що залежать від програмної реалізації алгоритму.

1.4. Вставки з убутним кроком (метод Шелла)

Ідея алгоритму складається в обміні елементів, розташованих не тільки поруч, як в алгоритмі простих уставок (п.1), але і далеко друг від друга, що значно скорочує загальне число операцій переміщення елементів. Для приклада візьмемо файл із 16 елементів. Спочатку проглядаються пари з кроком 8. Це пари елементів 1-9, 2-10, 3-11, 4-12, 5-13, 6-14, 7-15, 8-16. Якщо значення елементів у парі не упорядковані по зростанню, то елементи міняються місцями. Назвемо цей етап 8-сортуванням.

Наступний етап - 4-сортування, на якому елементи у файлі поділяються на четвірки:1-5-9-13,2-6-10-14,3-7-11-15, 4-8-12-16. Виконується сортування в кожній четвірці. Сортування може виконуватися методом простих уставок (п.1). Наступний етап - 2-сортування, коли елементи у файлі поділяються на 2 групи по 8: 1-3-5-7-9-11-13-15 і 2-4-6-8-10-12-14-16. Виконується сортування в кожній вісімці. Нарешті весь файл упорядковується методом простих уставок. Оскільки далекі елементи вже перемістилися на своє чи місце знаходяться поблизу від нього, цей етап буде значно менш трудомістким, чим при сортуванні вставками без попередніх "далеких" обмінів. Для даного приклада результати представлені в наступній таблиці.

Вихідний файл.На ньому виконується 8-сортування.Пари для можливого обміну з'єднані одинарними чи подвійними лініями. Подвійними лініями позначені пари, у яких відбувся обмін.

503 87 512 61 908 170 897 275 653 426 154 509 612 677 765 703

└──┼───╫──┼──╫────┼───╫───┼───┘ │ ║ │ ║ │ ║ │

└───╫──┼──╫────┼───╫───┼───────┘ ║ │ ║ │ ║ │

╙──┼──╫────┼───╫───┼───────────╜ │ ║ │ ║ │

└──╫────┼───╫───┼───────────────┘ ║ │ ║ │

╙────┼───╫───┼───────────────────╜ │ ║ │

└───╫───┼───────────────────────┘ ║ │

╙───┼───────────────────────────╜ │

└───────────────────────────────┘

Файл після 8-сортування. Лініями з'єднані четвірки для наступного етапу.

503 87 154 61 612 170 765 275 653 426 512 509 908 677 897 703

└───┼──┼──┼───┴───┼───╫───┼───┴───┼───╫───┼───┘ │ │ │

└──┼──┼───────┴───╫───┼───────┴───╫───┼───────┘ │ │

└──┼───────────╨───┼───────────╨───┼───────────┘ │

└───────────────┴───────────────┴───────────────┘

Файл після 4-сортування. Лініями з'єднані вісімки для наступного етапу.

503 87 154 61 612 170 512 275 653 426 765 509 908 677 897 703

╙──╫───╨──╫───╨───┼───╨───┼───┴───┼───┴───┼───╨───┼───╜ │

╙──────╨───────┴───────┴───────┴───────┴───────┴───────┘

Файл після 2-сортування:

154 61 503 87 512 170 612 275 653 426 765 509 897 677 908 703

Файл після остаточного сортування (1-сортування):

61 87 154 170 275 426 503 509 512 612 653 677 703 765 897 908

Час роботи алгоритму t приблизно оцінюється формулою:

t=a*N**b

де a і b - невідомі константи, що залежать від програмної реалізації алгоритму.