МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах
РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ" ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах Гендерна антидискримінаційна експертиза може зробити нас моральними рабами ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів
Контакти
Тлумачний словник Авто Автоматизація Архітектура Астрономія Аудит Біологія Будівництво Бухгалтерія Винахідництво Виробництво Військова справа Генетика Географія Геологія Господарство Держава Дім Екологія Економетрика Економіка Електроніка Журналістика та ЗМІ Зв'язок Іноземні мови Інформатика Історія Комп'ютери Креслення Кулінарія Культура Лексикологія Література Логіка Маркетинг Математика Машинобудування Медицина Менеджмент Метали і Зварювання Механіка Мистецтво Музика Населення Освіта Охорона безпеки життя Охорона Праці Педагогіка Політика Право Програмування Промисловість Психологія Радіо Регилия Соціологія Спорт Стандартизація Технології Торгівля Туризм Фізика Фізіологія Філософія Фінанси Хімія Юриспунденкция |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Метод Шелла
Подальшим розвитком методу сортування з включеннями є сортування методом Шелла, яке інакше називається сортуванням включеннями з відстанню, що зменшується. Метод полягає в тому, що таблиця, яка впорядковується, розділяється на групи елементів, кожна з яких упорядковується методом простих включень. У процесі впорядкування розміри таких груп збільшуються доти, поки всі елементи таблиці не ввійдуть у впорядковану групу. Вибір чергової групи для сортування і її розташування всередині таблиці здійснюється так, щоб можна було використовувати попередню впорядкованість. Групою таблиці називають послідовність елементів, номери яких утворять арифметичну прогресію з різницею h (h називають кроком групи). На початку процесу впорядкування вибирається перший крок групи h1, що залежить від розміру таблиці. Шелл запропонував брати h1=[h/2], a hi=h((i-1)/2). У більш пізніх роботах Хіббард показав, що для прискорення процесу доцільно визначити крок h1 за формулою: h1=2**k+1, де 2**k<n<=2**(k+1). Після вибору h1 методом простих включень впорядковуються групи, що містять елементи з номерами позицій і, i+h1, i+2*h1, …, i+mi*h1. При цьому i=1,2,..., h1; m[і] – найбільше ціле, що задовольняє нерівність i+m[i]*hi <= n. Потім вибирається крок h2 <h1 і впорядковуються групи, що містять елементи з номерами позицій і, i+h2,…, i+m[i]*h2.Ця процедура з усе зменшуваними кроками продовжується доти, поки черговий крок h[l] стане рівним одиниці (h1>h2>.. .>hl). Цей останній етап являє собою впорядкування всієї таблиці методом включень. Але оскільки вихідна таблиця впорядковувалася окремими групами з послідовним об'єднанням цих груп, то загальна кількість порівнянь значно менша, ніж n/4, необхідна при методі включень. Кількість операцій порівняння пропорційна n*(log2(n))**2. Застосування методу Шелла до масиву, використаного в наших прикладах, показано в таблиці 2.
Таблиця 2 – Приклад сортування методом Шелла.
У загальному випадку алгоритм Шелла природно переформулюється для заданої послідовності з t відстаней між елементами h1, h2, ..., ht, для яких виконуються умови h1 = 1 і h(i+1)< hi При правильно підібраних t і h складність алгоритму Шелла є Θ (n(1.2)), що істотно менша за складність простих алгоритмів сортування. Блок-схема методу Шелла подана на рисунку 15. У ньому використано змінні: а[] – масив, який необхідно відсортувати, t – допоміжна змінна того ж типу, що і масив, n – розмірність масиву.
Рисунок 15 – Блок-схема методу Шелла.
4 Обмінне сортування
Просте обмінне сортування (≪методом бульбашки≫) для масиву a a[1], a[2], ..., а[n] працює таким чином. Починаючи з кінця масиву порівнюються два сусідні елементи (а[n] і а[n-1]). Якщо виконується умова a[n-1 ]>a[n], то значення елементів міняються місцями. Процес продовжується для a[n-l] і а[n-2] і т.ін., поки не буде здійснено порівняння а[2] і а[1]. Зрозуміло, що після цього на місці а[1] виявиться елемент масиву з якнайменшим значенням. На другому кроці процес повторюється, але останніми порівнюються а[3] і а[2]. І так далі. На останньому кроці порівнюватимуться тільки поточні значення а[n] і а[n-1]. Зрозуміла аналогія з бульбашкою, оскільки найменші елементи (≪найлегші≫) поступово ≪спливають≫ до верхньої межі масиву. Приклад сортування методом бульбашки показаний в таблиці 3. Для методу простого обмінного сортування потрібна кількість порівнянь nх(n-1)/2, мінімальна кількість пересилань 0, а середня і максимальна кількість пересилань - Θ (n2). Блок-схема методу бульбашки поданана рисунку 16.
Рисунок 16 – Алгоритм сортування методом бульбашки.
Таблиця 3 – Приклад сортування методом бульбашки.
Метод бульбашки допускає три прості вдосконалення. По-перше, як показує таблиця 3, на чотирьох останніх кроках розташування значень елементів не змінювалося (масив виявився вже впорядкованим). Тому, якщо на деякому кроці не було вироблено жодного обміну, то виконання алгоритму можна припиняти. По-друге, можна запам'ятовувати якнайменше значення індекса масиву, для якого на поточному кроці виконувалися перестановки. Очевидно, що верхня частина масиву до елемента із цим індексом вже відсортована, і на наступному кроці можна припиняти порівняння значень сусідніх елементів, досягши такого значення індекса. По-третє, метод бульбашки працює нерівноправно для ≪легких≫ і≪важких≫ значень. Легке значення потрапляєна потрібне місце за один крок, а важке на кожному кроці опускається у напрямку до требаго місця на одну позицію. На цих спостереженнях заснований метод шейкерного сортування (ShakerSort). При його застосуванні на кожному наступному кроці змінюється напрямок послідовного перегляду. У результаті, на одному кроці ≪спливає≫ черговий найлегший елемент, а на іншому ≪тоне≫ черговий найважчий. Приклад шейкерного сортування наведений у таблиці 4. Шейкерне сортування дозволяє скоротити кількість порівнянь (за оцінкою Кнута середньою кількістю порівнянь є (n2 - n(const + ln n)), хоча порядком оцінки як і раніше залишається n2. Кількість посилань загалом не змінюється. Шейкерне сортування рекомендується використовувати в тих випадках, коли відомо, що масив ≪майже впорядкований≫.
Таблиця 4 – Приклад шейкерного сортування.
Читайте також:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|