Урок 55-56. Алгоритми впорядкування одновимірних масивів: сортування методом обміну
Тематичний урок «Інженерія даних: метод "бульбашки" у системах автоматичної стабілізації»
Тематичний урок «Інженерія даних: метод "бульбашки" у системах автоматичної стабілізації»
В інженерії цей метод часто називають «сортуванням обміном». Уявіть резервуар із рідинами різної щільності. Найлегші бульбашки газу завжди піднімаються нагору, штовхаючи важчі шари вниз. В програмуванні ми робимо те саме: порівнюємо дві сусідні "краплі" даних і міняємо їх місцями, якщо вони порушують порядок.
Метод обміну вимагає багато операцій запису в пам'ять. Для звичайного комп'ютера це мілісекунди, але для космічного зонда або датчика, що працює від сонячної батареї, зайві операції — це марна трата енергії. Тому інженери використовують «прапорець» (логічну змінну), щоб зупинити сортування, якщо масив уже впорядкований.
Перед тим як приступити до коду, згадайте головний принцип «бульбашки»:
Ми працюємо парами: порівнюємо A[j] та A[j+1].
Якщо лівий елемент більший за правий — міняємо їх місцями (використовуйте додаткову змінну-буфер temp).
Після першого повного проходу найбільше число гарантовано опиниться в кінці масиву — як важкий вантаж, що опустився на дно.
Вам знадобиться вкладений цикл: зовнішній рахує кількість проходів, а внутрішній — виконує порівняння сусідів.
Увага! Під час роботи з комп'ютером дотримуйтеся правил безпеки та санітарно-гігієнічних норм.
Повторіть правила безпечної роботи за комп’ютером.
Завантажте і встановіть: Середовище програмування Лазарус (для тих, хто не завантажив)
Ви розробляєте програмний модуль для цифрового нівеліра (приладу, що вимірює рівень нахилу поверхні). Прилад робить 6 контрольних замірів висоти в різних точках. Щоб система стабілізації спрацювала коректно, ці заміри потрібно подати в програму строго від найнижчої точки до найвищої.
Створіть фрагмент проєкту, який зчитує 6 показників висоти (дійсні числа) з вхідного вікна (Memo1), впорядковує їх за зростанням методом обміну («бульбашкою») та виводить відкалібрований список у вікно результатів (Memo2).
var a: array [0..5] of real; i, j: integer; x:real;
begin
for i := 0 to 5 do a[i] := StrToFloat(Memo1.Lines[i]); // уведення значень елементів масиву з 6 дійсних чисел
for i := 0 to 4 do // 5 разів повторюємо прохід по масиву
for j := 0 to 4-i do // порівнюємо кожну пару сусідніх елементів від першого елементу масиву
до останнього у невпорядкованій частині масиву
if a[j]>a[j+1] then // якщо лівий з двох сусідніх елементів більше правого з них
begin
x := a[j]; a[j] := a[j+1]; a[j+1] := x; // обмінюємо два сусідні елементи місцями, використовуючи допоміжну змінну х
end;
Memo2.Clear;
for i := 0 to 5 do Memo2.Lines.Append(floattostr(a[i])); // виведення значень упорядкованого масиву
end;
Збережіть усі файли та скриншоти.
Завантажте їх у розділ Ваші роботи на платформі Google ClassRoom.
Колеги, перед тим як деплоїти (запускати) ваш алгоритм, зверніть увагу на кілька важливих інженерних нюансів:
Якщо ваше технічне завдання вимагає впорядкувати дані за спаданням (від більшого до меншого), просто змініть фокус порівняння. Тепер ми робимо «рокіровку» сусідніх елементів лише тоді, коли лівий менший за правий. Один символ у коді — і вся система працює в іншому напрямку!
У реальних системах дані часто повторюються. Якщо в масиві є однакові числа (наприклад: 12; 4; 6; 2; 6; 4), наш алгоритм все одно спрацює чітко — він впорядкує їх за неспаданням. Спробуйте «прогнати» цей масив вручну і ви побачите, як однакові шістки та четвірки ввічливо стають поруч.
Навіщо комп'ютеру працювати зайве? Якщо під час чергового проходу алгоритм не зробив жодного обміну, це сигнал: масив уже ідеальний!
Інженерна ідея. Додайте «прапорець» (логічну змінну), який зупинить цикл достроково. Це критично важливо для «майже впорядкованих» даних — програма завершиться миттєво, зберігаючи ресурс процесора.
Це не просто красива назва. Уявіть склянку газованої води: легкі бульбашки газу стрімко летять вгору. У нашому масиві найбільші елементи так само «спливають» до кінця списку: спочатку найбільший, потім наступний за ним. Це фізика в коді!
Щоб остаточно зрозуміти логіку, подивіться, як сортування перетворюється на мистецтво:
🕺 Танцювальний батл: Бульбашка з угорським народним танцем — коли програмування стає хореографією.
📊 Digital-схема: Анімований приклад алгоритму бульбашкового сортування — подивіться, як «стрибають» цифри в пам'яті.
📽️ Майстер-клас: Алгоритми сортування. Анімація — наочний розбір кожного кроку.
"Інформатика, 9 клас" (Й.Я. Ривкінд та їнші):
Прочитайте та розберіть теоретичний матеріал пункту 5.3 (стор. 262).
Виконайте вправи 3, 4 (стор. 268).
Вітаю! Ваш модуль стабілізації готовий до тестування.
Що ми перевірили? Ми побачили, як простий попарний обмін призводить до глобального порядку в системі.
Висновок інженера: Метод обміну — це найнаочніший спосіб сортування. Він ідеально підходить для невеликих масивів даних (як наші 6 точок), де простота коду важливіша за швидкість обробки.
Наступний крок: Подумайте, чи зміниться ваш алгоритм, якщо прилад почне видавати не 6, а 6000 замірів на секунду?
Дякую за роботу! Ваша система працює стабільно.