Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_4-Sort.doc
Скачиваний:
6
Добавлен:
21.08.2019
Размер:
209.92 Кб
Скачать

2.2. Класифікація методів сортування

Методи впорядкування розділяються на внутрішні (які обробляють масиви) і зовнішні (що працюють тільки з файлами). Ми будемо розглядати тільки внутрішні методи сортування. Їхня важлива особливість полягає в тому, що ці алгоритми не вимагають додаткової пам'яті: вся робота з впорядкування виконується всередині того самого масиву.

Методи.

сортування

Внутрішнє

сортування

Зовнішнє

сортування

Прості

методи

Покращені

методи

Просте

злиття

Природнє

злиття

Збалансо-ване

злиття

Багато-фазне сор-тування

Метод

простої вставки

Метод

простого вибору

Метод

простого обміну

Сортування Шелла.

Пірамідальне сортування.

Швидке сортування .

Шейкер-

сортування

Метод

бінарного включення

рис.1. Класифікація методів сортування

2. 3. Бульбашкове сортування

Розглянемо найпростіший (і найгірший з точки зору витрат часу) спосіб сортування масиву. Нехай A[1], A[2], . , A[n] – масив із довільними значеннями елементів. Порівняємо A[1] і A[2]: якщо A[1]>A[2], то поміняємо їхні значення місцями. Потім порівняємо A[2] і A[3] та за необхідності обміняємо їхні значення. В результаті A[3] має найбільше значення серед A[1], A[2], A[3]. Продовжимо такі порівняння та обміни до кінця масиву: для всіх i від 1 до n-1 виконати якщо A[i]>A[i+1], то значення A[i] та A[i+1] обмінюються.

Якщо значення елементів розглядати як розміри бульбашок, то ці порівняння та обміни схожі на те, як більші бульбашки відтісняють менших униз і спливають нагору. Тому цей метод називається бульбашковим сортуванням. У результаті найбільша бульбашка стає верхньою, тобто останній елемент A[n] має найбільше значення.

Наприклад, послідовність значень <3, 4, 2, 1> перетвориться на <3, 2, 1, 4>. Далі почнемо все спочатку і перемістимо друге за величиною значення до передостаннього елемента A[n-1], перетворивши, наприклад, <3, 2, 1, 4> на <2, 1, 3, 4>. Потім третє за величиною значення перемістимо до A[n-2] тощо. Останній крок складається лише з порівняння A[1]<A[2] (та обміну значень за потреби). Опишемо бульбашкове сортування такою процедурою (bubble – це англійське "бульбашка"): procedure Bubbles1 (var A: ArT; n: Indx); var i, k: Indx; begin for k := n downto 2 do { k – права границя в черговому проході } for i := 1 to k - 1 do if A[i] > A[i+1] then swap (A[i], A[i+1]) end Тут і далі процедура swap задає обмін значень своїх параметрів. Як бачимо, разом виконується (n-1)+(n-2)+…+1= n× (n-1)/2 порівнянь.

Очевидно, що найбільше можливе число елементарних дій за цим способом прямо пропорційне кількості порівнянь. Тому час сортування масиву з n елементів у такий спосіб прямо пропорційний n× (n-1). Якщо при черговому виконанні циклу із заголовком for i:=1 to k-1 do процедури Bubbles1 не було жодного обміну, то масив уже відсортовано. Тому подальші проходи масивом зайві. Переробити процедуру сортування так, щоб її виконання закінчувалося за відсортованого масиву.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]