
- •Методичні вказівки для допомоги студентам у вивченні самостійних тем з предмету
- •Урок № 6
- •Особливості інтегрованого середовища програмування Turbo Pascal. Основні пункти меню
- •Урок № 13
- •Поняття рекурсії. Зовнішні оголошення та оголошення процедур та функцій з випередженням
- •Урок № 14
- •Особливості роботи в текстовому режимі
- •Урок № 20
- •Сортування масиву. Методи сортування масиву
- •Урок № 21
- •Рекурсивне сортування масиву методом вибору
- •Урок № 21
- •Алгоритми роботи з двомірними таблицями на мові програмування Pascal
- •Урок № 25
- •Приклади опису багатомірних масивів засобами мови програмування Pascal
- •Урок № 26
- •Робота з елементами двомірного масиву
- •Урок № 27
- •Записи. Види записів. Робота з записами
- •Урок № 30
- •Множини. Дії над множинами
- •Урок № 32
- •Запис/читання файлу. Маніпуляції вмістом файлу
- •Урок № 33
- •Типізовані файли. Текстові файли. Нетипізовані файли
- •Урок № 37
- •Динамічні данні без внутрішніх посилань
- •Урок № 42
- •Робота з кольорами
- •Урок № 43
- •Робота з координатами
- •Урок № 44
- •Принцип виведення точки та лінії на екран
- •Урок № 45
- •Принцип побудови не заповнених геометричних фігур
- •Урок № 46
- •Принцип побудови заповнених геометричних фігур
- •Урок № 47
- •Виведення тексту в графічному режимі
- •Урок № 50
- •Використання модуля mouse Питання для вивчення:
- •Урок № 51
- •Принципи побудови графічного зображення, що рухається
- •Урок № 52
- •Модуль Graphs3d
Урок № 20
(згідно робочої навчальної програми)
Сортування масиву. Методи сортування масиву
Питання для вивчення:
Поняття сортування масивів.
Метод "бульбашки".
Сортування вставками.
Сортування за допомогою вибору.
Поняття сортування масивів. Сортуванням або упорядкуванням масиву називається розташування його елементів за зростанням (або спаданням). Якщо не всі елементи різні, то треба говорити про неубивающей (або невозрастающем) порядку. Взагалі кажучи, це велика і складна тема, в якій відомо багато різних алгоритмів. Критерії оцінки ефективності цих алгоритмів можуть включати наступні параметри:
кількість кроків алгоритму, необхідних для впорядкування;
кількість порівнянь елементів;
кількість перестановок, виконуваних при сортуванні.
Метод "бульбашки". Мабуть, найпростішим методом сортування є так званий метод "бульбашки". Щоб усвідомити його ідею, потрібно уявити, що масив (таблиця) розташований вертикально. Елементи з великим значенням спливають вгору на зразок великих бульбашок. При першому проході уздовж масиву, починаючи прохід "знизу", береться перший елемент і по черзі порівнюється з подальшими. При цьому:
якщо зустрічається більш "легкий" (з меншим значенням) елемент, то вони міняються місцями;
при зустрічі з більш "важким" елементом, останній стає "еталоном" для порівняння, і всі наступні порівнюються з ним.
В результаті найбільший елемент виявляється в самому верху масиву.
Під час другого проходу вздовж масиву знаходиться другий за величиною елемент, який поміщається під елементом, знайденим при першому проході, т.е на другу зверху позицію, і т.д.
Потрібно зауважити, що при другому і подальших проходах, немає необхідності розглядати елементи, які розглянуті раніше. Іншими словами, під час j-го проходу не перевіряються елементи, що стоять на позиціях вище j.
Тепер можна привести текст програми упорядкування масиву M [1 .. N]:
begin
for j: = 1 to N-1 do
or i: = 1 to N-j do
if M [i]> M [i +1] then
swap (M [i], M [i +1])
end;
Стандартна процедура swap буде використовуватися і в інших алгоритмах сортування для перестановки елементів місцями:
procedure swap (var x, y: ...);var t: ...;
begin
t: = x;
x: = y;
y: = t
end;
Потрібно зауважити, що якщо масив M - глобальний, то процедура могла б містити тільки аргументи (а не результати). Крім того, враховуючи специфіку її застосування в даному алгоритмі, можна звести число парметр до одного (якому?), А не двом.
Сортування вставками. Другий метод називається метод вставок. Тому на j-му етапі ми "вставляється" j-ий елемент M [j] в потрібну позицію серед елементів M [1], M [2],. . ., M [j-1], які вже впорядковані. Після цієї вставки перший j елементів масиву M будуть впорядковані.
Щоб зробити процес переміщення елемента M [j], більш простим, корисно скористатися бар'єром: ввести "фіктивний" елемент M [0], чиє значення буде свідомо менше значення будь-якого з "реальних" елементів масиву (як це можна зробити?). Позначити це значення через-00.
Якщо бар'єр не використовувати, то перед вставкою M [j], в позицію i-1 треба перевірити, чи не буде i = 1. Якщо ні, тоді порівняти M [j] (який в цей момент перебуватиме в позиції i) з елементом M [i-1].
Описаний алгоритм має наступний вигляд:
begin
M [0]: =-00;
for j: = 2 to N do
begin
i:
while M [i] <M [i-1] do
begin
swap (M [i], M [i-1]);
i: = i-1
end
end
end;
Сортування за допомогою вибору. Ідея сортування за допомогою вибору не складніше двох попередніх. На j-му етапі вибирається елемент найменший серед M [j], M [j +1],. . ., M [N] (див. процедуру FindMin) і міняється місцями з елементом M [j]. В результаті після j-го етапу всі елементи M [j], M [j +1],. . ., M [N] будуть впорядковані.
Сказане можна описати таким чином:
begin
for j: = 1 to N-1 do
begin
FindMin
swap (M [j], M [i])
end
end;
У програмі, як уже було сказано, використовується процедура FindMin, що обчислює індекс lowindex елемента, найменшого серед елементів масиву з індексами не менше, ніж startindex:
procedure FindMin (startindex: integer; var lowindex: integer);
var lowelem: ...;
u: integer;
begin
lowindex: = startindex;
lowelem: = M [startindex];
for u: = startindex +1 to N do
if M [u] <lowelem then
begin
lowelem: = M [u];
lowindex: = u
end
end;
Питання для контролю вивченого матеріалу:
Що являє собою сортування масиву?
Що являє собою метод сортування “бульбашки”?
Які ще існують методи сортування масивів?
Література:
Фаронов В.В. Турбо Паскаль 7.0. Начальный курстор. – М: Диалектика, 1997. – 487 стор. 182-189