Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_Ч2(программирование).doc
Скачиваний:
52
Добавлен:
01.03.2016
Размер:
1.49 Mб
Скачать

Приклад сортування елементів масиву у зростаючому порядку за методом вставки

Результати послідовних кроків сортування представлені на рисунках 8.18 ‑ 8.22.

Рисунок 8.18 – Початкове розбиття масиву при сортуванні за методом вставки

Рисунок 8.19 – Результати виконання першого шагу сортування вставкою

Рисунок 8.20–Результати виконання другого шагу сортування вставкою

Рисунок 8.21–Результати виконання третього шагу сортування вставкою

Рисунок 8.22–Результати виконання четвертого шагу сортування вставкою

Функціясортування масиву заметодом вставки

Програмна реалізація алгоритму за методом вставки наведена на рисунку 8.23.

Ефективність роботи цієї функції можна дещо підвищити за рахунок зменшення кількості порівнянь під час пошуку місця для елементу із буфера. Зважаючи на те, що ліва частина масиву вже впорядкована, місце вставки для елементу із буфера можна знайти методом дихотомії. Цей метод буде розглянуто у підрозділі 8.3. Суть методу полягає в тому, що елемент, який знаходиться в середині області пошуку, порівнюється із елементом у буфері. В результаті порівняння можна визначити, в якій з половин області пошуку знаходиться місце для елементу із буфера, праворуч або ліворуч. Таким чином, в результаті одного порівняння область пошуку звужується наполовину.

Місце вставки буде знаходитися за останнім значенням правої межі області пошуку.

Визначивши місце вставки, можна робити зсув елементів лівої частини масиву праворуч і вставляти елемент із буфера.

Саме таку реалізацію алгоритму слід зробити у проекті до лабораторної роботи.

Рисунок 8.23–Функція сортування елементів масиву у зростаючому порядку за методомвставки

Сортування за ускладненими правилами

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

Однак у деяких випадках необхідно використовувати більш складні критерії порівняння елементів, ніж просте порівняння. У цих випадках доцільно написати функцію порівняння елементів по заданому правилу, яка буде повертати true, якщо порядок проходження елементів не порушений і false у противному випадку. Цю функцію слід викликати в тих місцях процедури сортування, де потрібно порівняння елементів.

Наприклад, нехай правило сортування масиву цілих чисел сформульовано таким чином: «Спочатку парні числа за спаданням, а потім непарні за зростанням».

Функцію, яка порівнює елементи таким чином, наведено нижче:.

bool goodDisposition(int x1, int x2){ if (x1 % 2 != x2 % 2) //Якщо одне число парне а друге непарне, то меншим буде парне return x1 % 2 < x2 % 2; else if( x1 % 2 == 0) // Числа парні, має бути спадання return x1>x2; else // Числа непарні, має бути зростання return x1 < x2; }

Тепер за допомогою створеної функції можна відсортувати масив в потрібному порядку. Метод сортування може бути будь-яким. Для прикладу використаємо сортування вибором:

void sortChoise(int ar[], int size){ for(int i=0; i<size-1;i++){ for(int j = i + 1; j<size; j++) { if (!goodDisposition(ar[i] ,ar[j])){ int x = ar[i]; ar[i] = ar[j]; ar[j] = x; } } } }