Поділіться своєю думкою про онлайн уроки інформатики. Пройдіть анонімне опитування на головній сторінці сайту
Крок 1: Порівняти перший та другий елементи масиву. Якщо вони в неправильному порядку, то поміняти їх місцями.
Крок 2: Перейти до наступної пари елементів і повторити процес.
Крок 3: Повторювати це, поки масив не буде повністю впорядкований.
Крок 1: Взяти перший елемент масиву як відсортований.
Крок 2: Взяти наступний елемент і вставити його в потрібне місце серед відсортованих елементів.
Крок 3: Повторити це для кожного елементу, поки весь масив не буде впорядкований.
Крок 1: Знайти мінімальний елемент у масиві.
Крок 2: Поміняти його з першим елементом.
Крок 3: Повторити це для залишку масиву, вибираючи мінімальний елемент з невідсортованої частини.
Крок 1: Вибрати елемент, який буде "опорним" (pivot).
Крок 2: Розділити масив на дві частини: одна, де всі елементи менше опорного, і інша, де всі елементи більше опорного.
Крок 3: Рекурсивно сортувати кожну з частин.
Розділення: Масив розбивається навпіл. Цей крок триває до тих пір, поки ми не отримаємо підмасиви, які мають лише один елемент.
Злиття: Поелементне порівняння та об'єднання підмасивів відбувається в цьому кроці. При цьому ми порівнюємо елементи двох підмасивів і об'єднуємо їх в один підмасив так, що він впорядкований.
Рекурсивне злиття: Кроки 1 та 2 рекурсивно повторюються для кожного підмасиву. Тобто, ми розділяємо підмасив, знову зливаємо його і так далі, доки не отримаємо весь відсортований масив.
Приклад:
Нехай у нас є масив [38, 27, 43, 3, 9, 82, 10].
Розділення:
[38, 27, 43, 3] та [9, 82, 10].
Подальше розділення: [38, 27], [43, 3], [9, 82], [10].
Злиття:
[27, 38], [3, 43], [9, 82], [10].
Подальше злиття: [3, 27, 38, 43], [9, 10, 82].
Рекурсивне злиття:
[3, 9, 10, 27, 38, 43, 82].
Таким чином, ми отримали впорядкований масив.
Цей алгоритм є дійсно діагональним підходом до сортування, де ми спочатку ділимо, потім завдяки злиттю отримуємо впорядкований масив.
Рекурсія - це техніка програмування, коли функція викликає сама себе в процесі своєї роботи.
У випадку сортування злиттям (Merge Sort), рекурсивні виклики використовуються для розділення масиву на менші частини та злиття їх у відсортований порядок.
В алгоритмі сортування злиттям кожен крок, такий як розділення чи злиття, є виконаним рекурсивно. Наприклад, якщо масив розділяється на дві половини, то для кожної з цих половин викликається та сама процедура розділення. Цей процес триває доти, поки ми не доходимо до базового випадку, коли довжина масиву стає 1 (підмасив з одного елемента). У такому випадку, масив вже вважається відсортованим, і виконується зворотній хід, тобто злиття відсортованих підмасивів.
Рекурсія зручна для вирішення задач, які можна розбити на менші аналогічні підзадачі.
Куришко Сергій Вікторович https://naurok.com.ua/algoritmi-vporyadkuvannya-elementiv-masivu-spisku-262459.html
Завдання 1
Створіть проєкт у якому масив із 10 дійсних чисел впорядковується за
зростанням.
На формі розташуйте два багаторядкових поля, для введення масиву з 10
дійсних чисел та виведення упорядкованого за зростанням масиву, при
натисканні на кнопку Упорядкувати відбувається виведення упорядкованого
масиву. Збережіть проект у папці з іменем Завдання 58.1, створеній у вашій
папці.
1. Запрограмуйте клавішу Упорядкувати:
procedure TForm1.Button1Click(Sender: TObject);
var a: array[1..10] of real;
i, j, nmin: Integer;
min: real;
begin
for i := 1 to 10 do
a[i] := StrToFloat(Memo1.Lines[i-1]);
j := 0;
for i := 1 to 10 do
begin
min := a[i];
nmin := i;
for j := i to 10 do
if a[j] < min then
begin
min := a[j];
nmin := j;
end;
a[nmin] := a[i];
a[i] := min;
end;
for i := 1 to 10 do
Memo2.Lines[i-1] := FloatToStr(a[i]);
2. Збережіть проект у своїй папці із іменем Завдання 58.1 та скомпілюйте
програму. Проведіть тестування.
Завдання №2
Створіть проєкт у якому масив із 10 дійсних чисел впорядковується за
спаданням.
Скористайтесь попереднім завданням.
Завдання 3. Сортування масиву методом вибору
Задача: Впорядкувати масив за зростанням, використовуючи метод вибору.
Розв'язок на Python
python
Копіювати код
def selection_sort(array):
n = len(array)
for i in range(n):
min_idx = i
for j in range(i + 1, n):
if array[j] < array[min_idx]:
min_idx = j
array[i], array[min_idx] = array[min_idx], array[i]
return array
# Приклад використання
arr = [64, 25, 12, 22, 11]
print("Впорядкований масив:", selection_sort(arr))
Розв'язок на Lazarus
Елементи на формі:
TEdit (Edit1) для введення масиву.
TButton (Button1) з підписом "Сортувати".
TLabel (Label1) для виведення результату.
pascal
Копіювати код
procedure TForm1.Button1Click(Sender: TObject);
var
InputArray: array of Integer;
i, j, min_idx, temp, n: Integer;
InputStr, ResultStr: string;
Numbers: TStringList;
begin
// Отримання введеного масиву
InputStr := Edit1.Text;
Numbers := TStringList.Create;
try
Numbers.Delimiter := ','; // Припускаємо, що числа розділені комами
Numbers.StrictDelimiter := True;
Numbers.DelimitedText := InputStr;
// Конвертація рядків у числа
SetLength(InputArray, Numbers.Count);
for i := 0 to Numbers.Count - 1 do
InputArray[i] := StrToInt(Trim(Numbers[i]));
n := Length(InputArray);
// Метод вибору
for i := 0 to n - 1 do
begin
min_idx := i;
for j := i + 1 to n - 1 do
begin
if InputArray[j] < InputArray[min_idx] then
min_idx := j;
end;
temp := InputArray[i];
InputArray[i] := InputArray[min_idx];
InputArray[min_idx] := temp;
end;
// Формування результату
ResultStr := '';
for i := 0 to n - 1 do
ResultStr := ResultStr + IntToStr(InputArray[i]) + ', ';
SetLength(ResultStr, Length(ResultStr) - 2); // Видаляємо зайву кому та пробіл
Label1.Caption := 'Впорядкований масив: ' + ResultStr;
finally
Numbers.Free;
end;
end;
Компоненти форми:
Додайте на форму:
TEdit (Edit1) для введення масиву, наприклад: 5, 2, 8, 1, 3.
TButton (Button1) з підписом "Сортувати".
TLabel (Label1) для виведення результату.
Подія кнопки:
Встановіть подію OnClick кнопки (Button1) на Button1Click.
Синтаксис введення:
Числа вводяться через кому, без зайвих пробілів.
Тестування:
Переконайтесь, що компіляція проходить без помилок.
Запустіть програму, введіть масив чисел і натисніть кнопку "Сортувати". Результат з'явиться у Label1.
4. Сортування методом бульбашки
Задача: Впорядкувати масив за спаданням методом бульбашки.
Розв'язок на Python
python
Копіювати код
def bubble_sort(array):
n = len(array)
for i in range(n):
for j in range(n - i - 1):
if array[j] < array[j + 1]:
array[j], array[j + 1] = array[j + 1], array[j]
return array
# Приклад використання
arr = [64, 25, 12, 22, 11]
print("Впорядкований масив:", bubble_sort(arr))
Розв'язок на Lazarus
Елементи на формі:
TEdit (Edit1) для введення масиву.
TButton (Button1) з підписом "Сортувати".
TLabel (Label1) для виведення результату.
pascal
Копіювати код
procedure TForm1.Button1Click(Sender: TObject);
var
InputArray: array of Integer;
i, j, temp, n: Integer;
InputStr, ResultStr: string;
Numbers: TStringList;
begin
// Отримання введеного масиву
InputStr := Edit1.Text;
Numbers := TStringList.Create;
try
Numbers.Delimiter := ','; // Припускаємо, що числа розділені комами
Numbers.StrictDelimiter := True;
Numbers.DelimitedText := InputStr;
// Конвертація рядків у числа
SetLength(InputArray, Numbers.Count);
for i := 0 to Numbers.Count - 1 do
InputArray[i] := StrToInt(Trim(Numbers[i]));
n := Length(InputArray);
// Метод бульбашки (сортування за спаданням)
for i := 0 to n - 1 do
for j := 0 to n - i - 2 do
if InputArray[j] < InputArray[j + 1] then
begin
temp := InputArray[j];
InputArray[j] := InputArray[j + 1];
InputArray[j + 1] := temp;
end;
// Формування результату
ResultStr := '';
for i := 0 to n - 1 do
ResultStr := ResultStr + IntToStr(InputArray[i]) + ', ';
SetLength(ResultStr, Length(ResultStr) - 2); // Видаляємо зайву кому та пробіл
Label1.Caption := 'Впорядкований масив: ' + ResultStr;
finally
Numbers.Free;
end;
end;
Додати компоненти на форму:
TEdit (Edit1) для введення масиву (наприклад, 5, 2, 8, 1, 3).
TButton (Button1) з підписом "Сортувати".
TLabel (Label1) для виведення результату.
Налаштувати подію кнопки:
Встановіть для Button1 обробник події OnClick на Button1Click.
Синтаксис введення:
Вводьте числа через кому (наприклад, 7, 3, 10, 1, 5).
Тестування:
Запустіть програму, введіть масив чисел у TEdit і натисніть кнопку "Сортувати". Результат відобразиться в TLabel.
5. Сортування вставками
Задача: Впорядкувати масив за зростанням методом вставки.
Розв'язок на Python
python
Копіювати код
def insertion_sort(array):
for i in range(1, len(array)):
key = array[i]
j = i - 1
while j >= 0 and key < array[j]:
array[j + 1] = array[j]
j -= 1
array[j + 1] = key
return array
# Приклад використання
arr = [64, 25, 12, 22, 11]
print("Впорядкований масив:", insertion_sort(arr))
Розв'язок на Lazarus
Елементи на формі:
TEdit (Edit1) для введення масиву.
TButton (Button1) з підписом "Сортувати".
TLabel (Label1) для виведення результату.
pascal
Копіювати код
procedure TForm1.Button1Click(Sender: TObject);
var
InputArray: array of Integer;
i, j, key, n: Integer;
InputStr, ResultStr: string;
Numbers: TStringList;
begin
// Отримання введеного масиву
InputStr := Edit1.Text;
Numbers := TStringList.Create;
try
Numbers.Delimiter := ','; // Числа розділені комами
Numbers.StrictDelimiter := True;
Numbers.DelimitedText := InputStr;
// Конвертація рядків у числа
SetLength(InputArray, Numbers.Count);
for i := 0 to Numbers.Count - 1 do
InputArray[i] := StrToInt(Trim(Numbers[i]));
n := Length(InputArray);
// Метод вставки
for i := 1 to n - 1 do
begin
key := InputArray[i];
j := i - 1;
while (j >= 0) and (InputArray[j] > key) do
begin
InputArray[j + 1] := InputArray[j];
Dec(j);
end;
InputArray[j + 1] := key;
end;
// Формування результату
ResultStr := '';
for i := 0 to n - 1 do
ResultStr := ResultStr + IntToStr(InputArray[i]) + ', ';
SetLength(ResultStr, Length(ResultStr) - 2); // Видаляємо зайву кому та пробіл
Label1.Caption := 'Впорядкований масив: ' + ResultStr;
finally
Numbers.Free;
end;
end;
Додати компоненти на форму:
TEdit (Edit1) для введення масиву (наприклад, 64, 25, 12, 22, 11).
TButton (Button1) з підписом "Сортувати".
TLabel (Label1) для виведення результату.
Налаштувати подію кнопки:
Встановіть для Button1 обробник події OnClick на Button1Click.
Синтаксис введення:
Вводьте числа через кому (наприклад, 64, 25, 12, 22, 11).
Перевірка роботи:
Запустіть програму, введіть масив чисел у TEdit, натисніть "Сортувати". Результат буде показаний у TLabel.
Алгоритм створення проєкту: Аналогічно до попередніх завдань.