Сортування злиттям
Сортування вставкою
У цьому методі з|із| неврегульованої послідовності елементів| вибирається по черзі кожен елемент, порівнюється з|із| попереднім, вже впорядкованим, і поміщається на відповідне місце|місце-милю|.
Сортування вставкою розгледимо|розглядатимемо| на прикладі|зразку| заданої невпорядкованій| послідовності елементів:
{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).