Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб раб_04.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
70.16 Кб
Скачать
    1. Сортування вставками

Ще один простий алгоритм сортування - сортування вставками заснований на наступній ідеї: припустимо, що перші k елементів масиву A[1..n] вже упорядковані: A[1] < A[2] < ... < A[k], A[k+1], ..., A[n]. Знайдемо місце елемента A[k+1] у початковому відрізку A[1],...,A[k] і вставимо цей елемент на своє місце, одержавши упорядковану послідовність довжини k+1. Оскільки початковий відрізок масиву упорядкований, пошук потрібно реалізувати як бінарний. Вставці елемента на своє місце повинна передувати процедура зрушення “хвоста” початкового відрізка для звільнення місця для вставки елемента.

Розв'язування.

Алгоритм вставками (включенням) здійснює n-1 лінійний перегляд масиву А. У кожнім перегляді шукається місце елемента a[k+1], що випливає безпосередньо за вже упорядкованим діапазоном масиву 1..k. На рисунку 4.2 цей діапазон – від a[1] до a[k] – заштрихований сірим кольором. Потім елемент a[k+1] уставляється на своє місце. Вставці елемента передує зрушення діапазону j..k вправо на одну позицію.

Таким чином, ліва, вже упорядкована частина масиву стає більшої на 1 елемент. На рисунку 4.2. виділений оброблюваний елемент a[k+1] і елементи, між якими він уставляється.

Рис 4.2. Алгоритм сортування вставками

Текст програми мовою Паскаль:

Program InsSort;

Const

n = 20;

Var

A : array[1..n] of Data;

k, l, r, i, j : Integer;

b : Data;

Begin

For k := 1 to n-1 do begin

b := A[k+1]; If b < A[k]

then begin

l := 1;

r := k; {Бінарний пошук}

Repeat

j := (l + r) div 2;

If b < A[j]

then r := j

else l := j + 1;

Until (l = j); {Зрушення “хвоста” масиву на 1 позицію вправо}

For і := k downto j do

A[і+1] := A[і];

A[j] := b; { Пересилання елемента на своє місце}

end

end;

End.

Ефективність алгоритму.

Пошук місця елемента A[k+1] вимагає приблизно log2 k порівнянь. Тому в гіршому випадку кількість порівнянь C(n) пропорційно C(n) ~ n ( log2 n).

Зсув "хвоста" на кожнім кроці зовнішнього циклу в гіршому випадку вимагає k перестановок. Тому ефективність алгоритму в гіршому випадку M(n) ~ n2.

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

2. Завдання:

Завдання 1 (на «задовільно»)

Розробити блок-схему алгоритму та за допомогою пакету MS Visual Studio створити консольну програму, яка здійснює сортування елементів масиву цілих бульбашковим методом.

Програма повинна надати можливість користувачу задати розмір масиву, ввести елементи масиву та вивести відсортований масив на екран.

Звіт має містити:

1. Словесний опис алгоритму

2. Блок-схему алгоритму

3. Код програми (програма має виводити на екран групу та ПІБ студента, який її розробив, а також результат розрахунку)

4. Перевірка виконання на тестових даних і результат роботи програми у вигляді копії екрану

Завдання 2 (на «добре», передбачає виконання попереднього завдання)

Доповнити попередню програму методом сортування простими вставками.

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

Звіт має містити:

1. Словесний опис алгоритму

2. Блок-схему алгоритму

3. Код програми (програма має виводити на екран групу та ПІБ студента, який її розробив, а також результат розрахунку)

4. Перевірка виконання на тестових даних і результат роботи програми у вигляді копії екрану

Завдання 3 (на «відмінно», передбачає виконання обох попередніх завдань)

Доповнити попередню програму підрахунком кількості операцій у процесі роботи усіх реалізованих алгоритмів, у тому числі із попередніх завдань (у якості операції слід рахувати будь-які арифметичні дії та порівняння, а також дії над комірками масиву – читання і запис), а також облік часу, затрачений алгоритмом на реалізацію сортування (для того, щоб облік часу був коректним, сортування необхідно повторити в циклі значну кількість раз). Побудувати порівняльні таблиці і діаграми для алгоритмів, зробити висновки.

Звіт має містити:

1. Словесний опис алгоритму

2. Блок-схему алгоритму

3. Код програми (програма має виводити на екран групу та ПІБ студента, який її розробив, а також результат розрахунку)

4. Перевірка виконання на тестових даних і результат роботи програми у вигляді копії екрану

5. Результати порівняння кількості операцій та тривалості виконання алгоритмів у вигляді таблиць і діаграм, висновки.