Сортування злиттям

Сортування вставкою

У цьому методі з|із| неврегульованої послідовності еле­ментів| вибирається по черзі кожен елемент, порівнюється з|із| попереднім, вже впорядкованим, і поміщається на відповідне місце|місце-милю|.

Сортування вставкою розгледимо|розглядатимемо| на прикладі|зразку| заданої невпорядкованій| послідовності елементів:

{40, 11,83,57, 32,21, 75,64}.

Процедура сортування відбита на мал. 2.3, де кружком|гуртком| на кожному етапі обведений аналізований елемент, стрілкою зверху відмічено місце|місце-милю| переміщення аналізованого елементу, у рамку поміщені впорядковані частки|частини| послідовності.

На першому етапі порівнюються два початкові елементи. Оскільки другий елемент менше першого, він переміщається на місце| першого елементу, який зрушується|зсовує| управо|вправо| на одну позицію|. Решта частки|частини| послідовності залишається без зміни.

На другому етапі з|із| неврегульованої послідовності вибирається елемент і порівнюється з|із| двома впорядкованими раніш| елементами. Оскільки|тому що| він більше попередніх, то залишається на місці. Потім аналізується четвертий, п'ятий і подальші|наступні| елементи — до тих пір, поки весь список не буде впорядкованим|, що має місце на останньому (сьомому) етапі.

 

Різновидом сортування вставкою є метод фон Неймана.

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

Нехай маємо два відсортованих в порядку зростання масиви р[1], р[2], ..., р[п] и q[1], q[2], ..., q[n] и маємо пустий масив r[1], r[2], ., r[2п], котрий необхідно заповнити значеннями масивів р и q в порядку зростання. Для злиття виконується наст. дія: порівнюються р[1] и q[1], и менше із значення записується в r[1]. Уявімо, що це значення р[1]. Тоді р[2] порівнюється с q[1] и менше із значень заноситься в r[2]. Уявімо, що це значення q[1]. Тоді на наступному кроці порівнюються значення р[2] и q[2] и т. д., поки не досягнута межа одного із масивів. Тоді остаток другого масиву просто дописуються у «хвіст» масиву R.

Приклад|зразок| злиття двох масивів показаний на мал. 2.4.

Складність методу сортування вставкою порядку 0(п2).


2.4. Сортування обміном

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

Потрібний, наприклад, провести сортування списку методом стандартного обміну або методом «бульбашки»:

{40, 11, 83,57, 32, 21, 75,64}.

Позначимо квадратними дужками із|із| стрілками обмінювані елементи, а — порівнювані елементи. Перший етап сортування показаний на мал. 2.5, а другий етап — на мал. 2.6.

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

 

позицію із|із| знайденим максимальним елементом, тим самим укорочувавши список. Після|потім| першого перегляду|проглядати| в останній позиції| опинився більший елемент, рівний 83 (виключаємо його з|із| подальшого|дальшого| розгляду).

Другий перегляд|проглядати| виявляє максимальний елемент, рівний 75 (див. мал. 2.6).

Процес сортування продовжується|триває| до тих пір, поки не будуть сформовані всі елементи кінцевого|скінченного| списку або не виповнюються| умова Айверсона.

Умова Айверсона:якщо в ході сортування при порівнянні елементів не було зроблено жодної перестановки, то безліч вважається за впорядковану (умова Айверсона виконується тільки при кроці d = 1).