
- •Передмова
- •Тема 1: Правила техніки безпеки при роботі з комп’ютером
- •Тема 2: Алфавіт. Ідентифікатори. Константи. Вирази
- •Тема 3: Загальна структура і розділи Pascal-програми
- •Тема 4: Введення і виведення у Pascal-і. Форматоване виведення
- •Тема 5: Прості (скалярні) типи данних
- •Тема 6: Завантаження середовища Турбо Паскаль. Функціональні клавіші
- •Тема 7: Меню опції
- •Тема 8: Вираження і пріоритет операцій. Стандартні математичні функції та процедури
- •Тема 9: Умовний оператор. Вкладений умовний оператор
- •Тема 10: Оператор вибору
- •Тема 11: Оператори циклу. Оператор циклу з параметром
- •Тема 12: Оператор циклу з перед- і з постумовою
- •Тема 13: Складні типи. Масиви
- •Тема 14: Багатомірні масиви
- •Тема 15: Пошук і сортування елементів масиву. Класи алгоритмів сортування
- •Тема 16: Динамічна пам'ять. Адреси і покажчики
- •Тема 17: Оголошення покажчиків, виділення та звільнення динамічної пам’яті
- •Тема 18: Процедури та функції для роботи з динамічною пам’яттю
- •Тема 19: Символьний тип даних. Упаковані масиви
- •Тема 20: Процедури та функції для обробки рядків
- •Тема 21: Структурований тип даних - безліч
- •Тема 22: Структурований тип даних – записи
- •Тема 23: Опис файлових змінних. Обробка типізованих файлів
- •Тема 24: Послідовний та прямий доступ до файлів
- •Тема 25: Обробка не типізованих файлів
- •Тема 26: Робота з текстовими файлами
- •Тема 27: Типізовані константи
- •Тема 28: Поняття та робота з процедурами та функціями
- •Тема 29: Використання модуля crt. Програмування клавіатури
- •Тема 30: Використання модуля crt. Текстове виведення на екран. Програмування звукового генератора
- •Тема 31: Графічні можливості tp 7.0. Використання бібліотеки Graph
- •Тема 32: Бібліотечні модулі користувача
- •Тема 33: Основні принципи ооп. Створення об’єктів. Використання об’єктів
- •Список літератури
- •Додаток а (довідковий) Основні алгоритми обробки масивів
- •Додаток б (довідковий) Питання перевірки знань з теорії
- •Додаток в (довідковий) Поширені коди клавіш
- •Додаток д (довідковий) Коди сканування клавіатури
Тема 15: Пошук і сортування елементів масиву. Класи алгоритмів сортування
Сортування методом вибору найменшого елемента
Пошук мінімального (максимального) елемента в масиві
Задача пошуку полягає у пошуку в масиві елемента (чи декількох елементів) із заданими значеннями. Наприклад, пошук максимального чи мінімального значення елемента.
Алгоритм пошуку розглянемо на прикладі. Нехай заданий масив різних елементів:
x1 , x2 , x3 … xn ;
Необхідно знайти мінімальне значення елементів масиву і номер мінімального елемента.
Пошук будемо проводити шляхом порівняння всіх елементів масиву з еталоном, тобто з деякою змінною, якый привласнимо значення першого елемента масиву. Порівняємо еталон зі значенням другого елемента масиву. Якщо його значення буде менше еталона, то змінимо еталон, привласнивши йому значення другого елемента, і перейдемо до порівняння його з третім елементом; у противному випадку відразу перейдемо до порівняння еталона з третім елементом. За причини того, що всі дії порівняння виконуються однаково для всіх елементів масиву, то основою алгоритму пошуку буде цикл.
Приклад програми:
{Пошук миним. елемента в масиві і його номер}
const n=10;
type massiv=array[1..n] of real;
var
x : massiv; i, nom : integer; min : real;
begin
writeln(‘введіть’,n,’елементів масиву:’);
for i := 1 to n do read(x[ i ]);
min := x[1]; nom :=1;
for i := 2 to n do
begin
if min > x[ i ] then
begin
min := x[ i ]; nom :=i
end
end;
writeln(‘мінімальне значення’,min:2:3);
writeln(‘це’,nom’элемент масиву.’)
end.
Сортування методом вибору найменшого елемента
Задача сортування полягає в перестановці елементів масиву у визначеному порядку, наприклад, у порядку убування чи зростання.
Наприклад.
Вихідний
масив
Упорядкований за
зростанням
масив
Розглянемо три найбільш прості методи сортування.
Сортування методом вибору найменшого елемента полягає в наступному. Знайдемо в масиві елемент із найменшим значенням і поміняємо його місцями з першим елементом. Потім розглянемо масив, що залишився, без першого елемента, починаючи з 2-го, і повторимо ті ж дії. Так продовжуємо доти, поки не залишиться один, останній елемент. Він буде найбільшим. У результаті одержимо масив упорядкований по зростанню значень елементів. Приклад програми:
const
n=10;
type massiv=array[1..n] of real;
var
a : massiv; i, j, k : integer; x : real;
begin
writeln(‘введіть’,n,’елементів масиву:’)ж
for i :=1 to n do read(a[ i ]);
writeln(‘упорядкований по зростанню масив:’);
for i :=1 to n do
begin
k :=i; x := a[ i ];
for j :=i+1 to n do
if a[ j ] < x then
begin
x :=a[j];
k :=j;
end;
a[ k ] :=a[ i ];
a[ i ] :=x;
write(x:6:2);
end;
end.
Сортування методом обміну (метод “пухирця”)
Полягає в багаторазовому попарному порівнянні елементів масиву, що знаходяться поруч, і перестановці їх у заданому порядку. Наприклад, нехай заданий масив:
Значення елементів масиву необхідно упорядкувати по зростанню.
Розглянемо його від кінця до початку (порядок розгляду не має значення). Порівняємо 4-й і 5-й елементи. Вони розташовані не в порядку зростання, поміняємо їх місцями. Положення елементів буде наступним:
Тепер порівняємо 3-й і4-й елементи. Вони розташовані в порядку зростання і їх залишимо на місці. Порівнюємо 2-й і 3-й елементи і змінюємо їх місцями:
І, нарешті, порівнюємо і змінюємо місцями 1-й і 2-й елемент
21 72 203 34 155
У результаті мінімальний елемент перемістився на перше місце в масиві. Розглянутий процес повторюємо доти, поки елементи масиву не виявляться упорядкованими по зростанню їхніх значень. Перестановка елементів у попарному порівнянні нагадує всплиття пухирця повітря в рідині, відкіля і названий даний метод сортування.
Приклад програми:
const
n=10;
type massiv=array[1..n] of integer;
var
a : massiv; i, j, x : integer;
begin
writeln('Введіть 10 значень елементів масиву:');
for i := 1 to n do read (a[i]);
writeln(‘упорядкований по зростанню масив:’);
for i := 2 to n do
begin
for j := n downto i do
if a[j-1] > a[j] then
begin
x := a[j-1];
a[j-1] := a[j];
a[j] := x;
end;
for := 1 to n do
write(a[i],’’);
end;
end.
Сортування методом уставок
Полягає в наступному. Нехай у заданій послідовності А[1], А[2], ..., А[n] перші елементи уже відсортовані. У цій частині послідовності будемо шукати місце для і-го елемента, порівнюючи його один по одному зі всіма елементами, що знаходяться ліворуч, поки не виявиться, що деякий А[j] елемент<=A[і]. Зрушимо праву частину послідовності A[j+1], A[j+2], ..., A[j-1] на один елемент у право, звільнивши місце A[j=1] для елемента A[і], куди його і поставимо.
У випадку, якщо виявиться, що елемент A[і] менше всіх елементів, що стоять ліворуч, і місце йому не знайдено, перегляд закінчимо по досягненню першого елемента і всю послідовність зрушимо на один елемент вправо, а елемент A[і] поставимо на перше місце.
Проробивши подібні дії від 2-го елемента до n-го, одержимо упорядковану по зростанню значень елементів послідовність.
Приклад програми:
const
n=10;
type massiv=array[1..n] of integer;
var
a : massiv;
i, j, x : integer;
begin
writeln('введіть вектор з ',n,' цілих чисел:');
for і := 1 to n do
read(a[i]);
writeln(‘упорядкований по зростанню вектор:’);
for i := 2 to n do
begin
x := a[i];
j := i-1;
while (x<a[j]) and (j>0) do
begin
a[j+1] := a[j];
j := j-1;
end;
a[j+1] :=x;
for i:= 1 to n do
write(a[i],’’);
end.
Питання для контролю.
1. Задача пошуку елемента в масиві і задача сортування елементів у масиві.
2. Алгоритм пошуку мінімального елемента в масиві і визначення його номера.
3. Алгоритм сортування методом вибору найменшого елемента.
4. Алгоритм сортування методом уставок. Приклад програми.