- •Інформатика
- •Необчислювальні алгоритмы
- •Від автора
- •Створення алгоритму
- •Налагодження алгоритму
- •Допоміжні задачі
- •Поняття систем числення
- •Числова інформація Цілі числа
- •Дійсні числа
- •Текстова інформація Символи
- •Дерево. Бінарне дерево
- •If to nil then with t* do begin
- •Бінарний пошук Пошук діленням навпіл
- •Рекурсивний бінарний пошук
- •Пошук у рядку
- •Скінченні автомати Основні поняття
- •Пошук у мережі
- •Прямі методи сортування Сортування вибором
- •Сортування обміном
- •Шейкерне сортування
- •Сортування методом Шелла
- •Швидке сортування
- •Метод прямого злиття
- •Метод природного злиття
- •Сортування підрахунком
- •Цифрове сортування
- •Література
- •61012, М. Харків, вул. Енгельса, 11.
Прямі методи сортування Сортування вибором
Цей алгоритм найчастіше розглядається в курсі «Основ ал-горитмізації та програмування» як класичний.
150
Нагадаємо
його. Якщо спробувати навести
порядок у карт-ках,
на
яких
написані деякі числа,
то, напевно, дійдемо
такого
висновку.
Спочатку треба
знайти
мінімальний елемент у
всьо-му
заданому
масиві
і поміняти його місцями з елементом,
який
поки що стоїть на
першому
місці. Це треба
зробити,
бо саме на
цьому
місці повинен
стояти
знайдений мінімальний елемент. Тепер
уже
перший елемент знаходиться
на
своему місці,
і мож-на його
закрити,
не
розглядаючи
далі. Масив, який маємо від-сортувати,
фактично зменшився на
один елемент (перший). 3 новим масивом
виконаємо
ті самі ді'і: знайдемо в
ньому
міні-мальний елемент
і
поміняємо його місцями з першим
відкри-тим
елементом
(насправді
він є другим
елементом у заданому масиві).
Так
будемо продовжувати доти, доки на
останньому кроці
не
залишаться два останні
елементи.
Якщо необхідно,
поміняємо і їх місцями. На
цьому сортування завершено.
Розглянутий алгоритм можна представити в такій словесній формі:
-
розглядаємо масив від елемента з номером 1 до елемента з номером п;
-
у масиві, який розглядається, вибираємо елемент з най-меншим значениям;
-
визначений у п. 2 елемент міняємо місцями з першим елементом масиву, який розглядається;
-
зменшуємо розмірність масиву, що розглядається, переметивши його початок на наступний елемент;
-
пункти 2-4 виконуемо для всіх елементів масиву від 1 до (л - 1).
Розглянемо масив 44, 55, 12, 42, 94, 18, 06, 67 і застосуємо до нього описаний алгоритм, подавши його у вигляді такої таб-лиці (табл. 15).
Таблица 15
І
|
1 |
44 |
55 |
12 |
42 |
94 |
18 |
06 |
67 |
|
2 |
06 |
55 |
12 |
42 |
94 |
18 |
44 |
67 |
|
3 |
06 |
12 |
55 |
42 |
94 |
18 |
44 |
67 |
|
4 |
06 |
12 |
18 |
42 |
94 |
55 |
44 |
67 |
|
5 |
06 |
12 |
18 |
42 |
94 |
00 |
44 |
67 |
|
6 |
06 |
12 |
18 |
42 |
44 |
55 |
94 |
67 |
|
7 |
06 |
12 |
18 |
42 |
44 |
55 |
94 |
67 |
|
8 |
06 |
12 |
18 |
42 |
44 |
55 |
67 |
94 |
151
Кожний рядок г таблиці, починаючи з другого, - це крок ви-конання алгоритму (в першому рядку розміщено початковий вигляд масиву). У кожному рядку курсивом виділені елементи, які міняються місцями, а в лівій частині (вони виділені напів-жирним шрифтом) - елементи рядка, які вже стоять на своїх місцях.
Цей алгоритм у вигляді програми буде таким:
for i := 1 to n - 1 do begin
min :=a[i]; k :=i; forj :=i + 1 ton do if a[j] < min then begin
I min :=a[j]; k:=j end; с := a[i]; a[i] := a[k]; a[k] := c; end;
Для того щоб описаний алгоритм виконував сортування масиву за спаданиям, треба логічний вираз a[j] < min замінити на a[j] > min або замінити (при бажанні) ідентифікатор min на іден-тифікатор max.
