Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.О.П / ооп / 4_кол / К курсовой / Методи побудови алгоритмів та їх аналіз. Караванова Т.П. / Інформатика_1 (методи побудови алгоритмівта та їх аналіз).doc
Скачиваний:
105
Добавлен:
30.05.2020
Размер:
2.5 Mб
Скачать

Шейкерне сортування

Шейкерне сортування ShakerSort (з ант. Shake - трясти) є покращенням методу обміну і базується на ідеї саме цього методу.

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

Для того щоб відповісти на це запитання, повернемося до прикладу, наведеного в таблиці 16. Шд час останніх трьох про-ходів по масиву не було зроблено жодного переставлення еле- I ментів! Про що це говорить? Зрозуміло, це означає, що масив уже впорядкований, а тому немає сенсу виконувати ці останні I кроки сортування. Отже, перше вдосконалення полягае в тому.

158

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

Але виявляється, що і це вдосконалення такоя; можна по-кращити. Тому друге вдосконалення полягає в тому, щоб на кожному кроці запам'ятовувати номер елемента, з яким був виконаний останній обмін. Це означатиме, що всі елементи зище від цього місця уже впорядковані. Тому наступний пе­регляд можна виконувати лише до цього елемента.

Ці дві ідеї щодо покращення методу прямого обміну покла-іені в основу методу шейкерного сортування.

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

Приклад перший:

12,18, 42, 44, 55, 67, 94, 06.

У цьому прикладі «поганий» елемент (06) знаходиться на «важкому кінці». Він «спливе» на свое місце, тобто перему­титься на перше місце в масиві, за один прохід.

Приклад другий:

94, 06,12,18, 42, 44, 56, 67.

У цьому прикладі «поганий» елемент (94) на «легкому кін-ці». Він «потоне», тобто переміститься на останнє місце в ма-сиві, за сім проходів.

Метод прямого обміну можна вдосконалити так: чергувати напрям послідовних переглядів масиву. Тепер зрозуміло, чому пей метод носить назву «шейкерного» сортування.

Розглянемо цей метод на прикладі таблиці 18.

Таблиця18

2

3

3

4

4

8

&

7

7

4

t

І

t

1

V

t

44

06

06

06

06

55

44

44

12

12

12

55

12

44

18

42

12

42

18

42

94

42

55

42

44

18

94

18

55

55

06

18

67

67

67

67

67

94

94

94

159

У перших двох рядках таблиці будемо вказувати межі змі-ни індексів елементів масиву, який розглядається на даному кроді тдодо його апорядкування. Змінна L - індекс крайнього лівого елемента масиву, до якого міняється значения змінної ; при викошшні опорації a[j — 1] > a\j\, R — відповідно крайньо­го правого.

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

Реалізащю описаного алгоритму можна представити у ви-гляді тексту такої Pascal-програми:

L := 2; R := n; k := п; repeat

for j := R downto L do if a[j-1]>a[j]then begin

| x := aU - 1]; aU - 1] := a[j]; afl] := x; k := j end; L := k + 1; for j := L to R do if a[j- 1] >a[j]then begin

| x := a[j - 1]; a[j - 1] := a[j]; aD] := x; k := j end; R:=k-1; until L > R;

Аналіз покращених методів сортування, особливо шей-керного сортування, є достатньо складним. Це пов'язане з тим, що при покращенні методов ми фактично базуемося на тій са-мій ідеї', яка закладена у базовому методі.

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

У загальному випадку всі сортування фактично пересувають кожний елемент а. на кожному елементарному кроці на одну позипДю. Тому вони вимагають л2 таких кроків.

Отже, можна говорити, що оцінка ефективності виконання будь-якого покращеного алгоритму сортування, так само як для прямих методів, становить 0(л2).

160

При тестуванні покращених алгоритмів сортування, як і для прямих методів, треба сформувати такі вхідні дані:

  • вхідний масив уже впорядкований необхідним чином;

  • вхідний масив є частково впорядкованим;

  • вхідний масив упорядкований у зворотному порядку;

  • елементи вхідного масиву розміщені випадковим чином. Коректність алгоритму перевірити при п = 10, п » 100,

п ■= 1000, п = 10 000, ті = 30 000.

/ Запитання для самоконтролю

  1. На чому базується ідея покращення методу прямого включения?

  2. Який пошуковий алгоритм застосовується для покращення ме­тоду прямого включения?

  3. Наведіть текст фрагмента Pascal-програми, який реалізує по­кращення методу прямого включения.

  4. На чому базується ідея покращення методу прямого обміну?

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

  6. Сформулюйте алгоритм шейкерного сортування.

  7. Продемонструйте у вигляді таблиц! роботу методу шейкерного сортування на конкретному масиві значень.

  8. Запишіть текст Pascal-програми, який реалізує алгоритм шей­керного сортування.

  9. Проанапізуйте ефективність роботи покращених методів сорту­вання.

10. Якою є оцінка ефективності роботи покращених методів сорту­вання?

Завдання

  1. Реалізувати у вигляді програми алгоритм сортування за­дано! послідовності за зростанням методом з двійковим вклю­чениям.

  2. Реалізувати у вигляді програми алгоритм шейкерного сортування заданої послідовності за зростанням.

  3. Змінити алгоритми у завданнях 1-2 так, щоб сортування відбувалося за спаданиям.

  4. Протестувати реалізовані у завданнях 1-3 алгоритми для масиву 15, 4, 10, 8, 6, 9, 16, 1, 7, 3, 11, 14, 2, 5, 12, 13.

  5. Проаналізувати покрокове виконання завдання 4 щодо кількості виконуваних дій.

  6. Підібрати власні тести, які доводять переваги й показу-ють недоліки кожного з покращених методів сортування при п > 100.

  1. Зробити письмовий аналіз завдань 4-6.

в Іиформ.іпіки. 9 I" >•• I

161

УДОСКОНАЛЕНІ МЕТОДИ СОРТУВАННЯ