- •Інформатика
- •Необчислювальні алгоритмы
- •Від автора
- •Створення алгоритму
- •Налагодження алгоритму
- •Допоміжні задачі
- •Поняття систем числення
- •Числова інформація Цілі числа
- •Дійсні числа
- •Текстова інформація Символи
- •Дерево. Бінарне дерево
- •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.