Назад Зміст

Функції сортування масиву за зростанням

Приклад 1

Написати функцію з прототипом void SortArr_1(int* arr, int n), яка сортує за зростанням одновимірний масив arr методом простого вибору.

Напишіть програму, яка:

Результати роботи

Код програми з згорнутими функціями

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
// Прототипи функцій
void RandArr(int* arr, int n, int a, int b);  // Заповнення масиву випадковими числами
void PrintArr(int* arr, int n);               // Вивід масиву на екран
void SortArr_1(int* arr, int n);              // Сортування масиву методом простого вибору

int main()
{
    srand(time(0));  // Ініціалізація генератора випадкових чисел

    int a, b;
    cout << "Введіть межі діапазону [a, b]: ";
    cin >> a >> b;

    int n;
    cout << "Введіть розмір масиву: ";
    cin >> n;

    int mass[n];  // Оголошення масиву

    RandArr(mass, n, a, b);  // Заповнення масиву
    cout << "Початковий масив: ";
    PrintArr(mass, n);       // Вивід початкового масиву

    SortArr_1(mass, n);      // Сортування масиву
    cout << "Відсортований масив: ";
    PrintArr(mass, n);       // Вивід відсортованого масиву

    return 0;
}

// Функція для заповнення масиву випадковими числами в діапазоні [a, b]
void RandArr(int* arr, int n, int a, int b)
{
    for (int i = 0; i < n; i++) {
        arr[i] = a + rand() % (b - a + 1);  // Генерація випадкового числа
    }
}

// Функція для виведення масиву на екран
void PrintArr(int* arr, int n)
{
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

// Функція сортування масиву методом простого вибору (Selection Sort)
void SortArr_1(int* arr, int n)
{
    for (int i = 0; i < n - 1; i++) {
        int min_index = i;  // Індекс мінімального елемента

        // Пошук мінімального елемента в невідсортованій частині
        for (int j = i + 1; j < n; j++) {
            if (arr[j] < arr[min_index]) {
                min_index = j;
            }
        }

        // Обмін мінімального елемента з першим елементом невідсортованої частини
        if (min_index != i) {
            int temp = arr[i];
            arr[i] = arr[min_index];
            arr[min_index] = temp;
        }
    }
}

Приклад 2

Написати функцію з прототипом void SortArr_1(int* arr, int n, int k, int s), яка сортує за зростанням в одновимірному масиві arr методом простого вибору елементи з k-го по s-й включно.

Напишіть програму, яка:

Результати роботи

Код програми з згорнутими функціями

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
// Прототипи функцій
void RandArr(int* arr, int n, int a, int b);  // Заповнення масиву випадковими числами
void PrintArr(int* arr, int n);               // Вивід масиву на екран
void SortArr_1(int* arr, int n, int k, int s); // Сортування частини масиву методом вибору

int main()
{
    srand(time(0));  // Ініціалізація генератора випадкових чисел

    int a, b;
    cout << "Введіть межі діапазону [a, b]: ";
    cin >> a >> b;

    int n;
    cout << "Введіть розмір масиву: ";
    cin >> n;

    int mass[n];  // Оголошення масиву

    RandArr(mass, n, a, b);  // Заповнення масиву
    cout << "Початковий масив: ";
    PrintArr(mass, n);       // Вивід початкового масиву

    int x, y;
    cout << "Введіть індекси для сортування (x та y): ";
    cin >> x >> y;

    SortArr_1(mass, n, x, y);  // Сортування частини масиву
    cout << "Масив після сортування: ";
    PrintArr(mass, n);         // Вивід зміненого масиву

    return 0;
}

// Функція заповнення масиву випадковими числами
void RandArr(int* arr, int n, int a, int b)
{
    for (int i = 0; i < n; i++) {
        arr[i] = a + rand() % (b - a + 1);
    }
}

// Функція виведення масиву
void PrintArr(int* arr, int n)
{
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

// Функція сортування частини масиву методом вибору
void SortArr_1(int* arr, int n, int k, int s)
{
    // Перевірка коректності введених індексів
    if (k < 0) k = 0;
    if (s >= n) s = n - 1;
    if (k > s) return;

    // Сортування методом вибору для вказаного діапазону
    for (int i = k; i <= s; i++) {
        int min_index = i;
        for (int j = i + 1; j <= s; j++) {
            if (arr[j] < arr[min_index]) {
                min_index = j;
            }
        }
        // Обмін елементів
        if (min_index != i) {
            int temp = arr[i];
            arr[i] = arr[min_index];
            arr[min_index] = temp;
        }
    }
}

Приклад 3

Написати функцію з прототипом void SortArr_2(int* arr, int n), яка сортує за зростанням одновимірний масив arr методом простого обміну.

Напишіть програму, яка:

Результати роботи

Код програми з згорнутими функціями

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
// Прототипи функцій
void RandArr(int* arr, int n, int a, int b);  // Заповнення масиву випадковими числами
void PrintArr(int* arr, int n);               // Вивід масиву на екран
void SortArr_2(int* arr, int n);              // Сортування методом простого обміну (бульбашкою)
void SwapArr(int* arr, int n, int k1, int k2); // Обмін елементів масиву

int main()
{
    srand(time(0));  // Ініціалізація генератора випадкових чисел

    int a, b;
    cout << "Введіть межі діапазону [a, b]: ";
    cin >> a >> b;

    int n;
    cout << "Введіть розмір масиву: ";
    cin >> n;

    int mass[n];  // Оголошення масиву

    RandArr(mass, n, a, b);  // Заповнення масиву
    cout << "Початковий масив: ";
    PrintArr(mass, n);       // Вивід початкового масиву

    SortArr_2(mass, n);      // Сортування методом простого обміну
    cout << "Відсортований масив: ";
    PrintArr(mass, n);       // Вивід відсортованого масиву

    SwapArr(mass, n, 0, n-1); // Перевертання масиву
    cout << "Перевернутий масив: ";
    PrintArr(mass, n);       // Вивід перевернутого масиву

    return 0;
}

// Функція заповнення масиву випадковими числами
void RandArr(int* arr, int n, int a, int b)
{
    for (int i = 0; i < n; i++) {
        arr[i] = a + rand() % (b - a + 1);
    }
}

// Функція виведення масиву
void PrintArr(int* arr, int n)
{
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

// Функція сортування методом простого обміну (бульбашкове сортування)
void SortArr_2(int* arr, int n)
{
    for (int i = 0; i < n-1; i++) {
        for (int j = 0; j < n-i-1; j++) {
            if (arr[j] > arr[j+1]) {
                // Обмін елементів
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

// Функція для обміну елементів місцями (використовується для перевертання масиву)
void SwapArr(int* arr, int n, int k1, int k2)
{
    while (k1 < k2) {
        int temp = arr[k1];
        arr[k1] = arr[k2];
        arr[k2] = temp;
        k1++;
        k2--;
    }
}

Приклад 4

Написати функцію з прототипом void SortArr_2(int* arr, int n, int k, int s), яка сортує за зростанням в одновимірному масиві arr методом простого обміну елементи з k-го по s-й включно.

Напишіть програму, яка:

Результати роботи

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

// Прототипи функцій
void RandArr(int* arr, int n, int a, int b);  // Заповнення масиву випадковими числами
void PrintArr(int* arr, int n);               // Вивід масиву на екран
void SortArr_2(int* arr, int n, int k, int s); // Сортування частини масиву методом простого обміну

int main()
{
    srand(time(0));  // Ініціалізація генератора випадкових чисел

    int a, b;
    cout << "Введіть межі діапазону [a, b]: ";
    cin >> a >> b;

    int n;
    cout << "Введіть розмір масиву: ";
    cin >> n;

    int mass[n];  // Оголошення масиву

    RandArr(mass, n, a, b);  // Заповнення масиву
    cout << "Початковий масив: ";
    PrintArr(mass, n);       // Вивід початкового масиву

    int x, y;
    cout << "Введіть індекси для сортування (x та y): ";
    cin >> x >> y;

    SortArr_2(mass, n, x, y);  // Сортування частини масиву
    cout << "Масив після сортування: ";
    PrintArr(mass, n);         // Вивід зміненого масиву

    return 0;
}

// Функція заповнення масиву випадковими числами
void RandArr(int* arr, int n, int a, int b)
{
    for (int i = 0; i < n; i++) {
        arr[i] = a + rand() % (b - a + 1);
    }
}

// Функція виведення масиву
void PrintArr(int* arr, int n)
{
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

// Функція сортування частини масиву методом простого обміну (бульбашкове сортування)
void SortArr_2(int* arr, int n, int k, int s)
{
    // Перевірка коректності введених індексів
    if (k < 0) k = 0;
    if (s >= n) s = n - 1;
    if (k > s) return;

    // Сортування методом простого обміну для вказаного діапазону
    for (int i = k; i <= s; i++) {
        for (int j = k; j < s - (i - k); j++) {
            if (arr[j] > arr[j+1]) {
                // Обмін елементів
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

Приклад 5

Написати функцію з прототипом void SortArr_3(int* arr, int n), яка сортує за зростанням одновимірний масив arr методом прямого включення.

Напишіть програму, яка:

Результати роботи

Код програми з функціями

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

// Прототипи функцій
void RandArr(int* arr, int n, int a, int b);  // Заповнення масиву випадковими числами
void PrintArr(int* arr, int n);               // Вивід масиву на екран
void SortArr_3(int* arr, int n);              // Сортування методом прямого включення

int main()
{
    srand(time(0));  // Ініціалізація генератора випадкових чисел

    int a, b;
    cout << "Введіть межі діапазону [a, b]: ";
    cin >> a >> b;

    int n;
    cout << "Введіть розмір масиву: ";
    cin >> n;

    int mass[n];  // Оголошення масиву

    RandArr(mass, n, a, b);  // Заповнення масиву
    cout << "Початковий масив: ";
    PrintArr(mass, n);       // Вивід початкового масиву

    SortArr_3(mass, n);      // Сортування методом прямого включення
    cout << "Відсортований масив: ";
    PrintArr(mass, n);       // Вивід відсортованого масиву

    return 0;
}

// Функція заповнення масиву випадковими числами
void RandArr(int* arr, int n, int a, int b)
{
    for (int i = 0; i < n; i++) {
        arr[i] = a + rand() % (b - a + 1);
    }
}

// Функція виведення масиву
void PrintArr(int* arr, int n)
{
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

// Функція сортування методом прямого включення (insertion sort)
void SortArr_3(int* arr, int n)
{
    for (int i = 1; i < n; i++) {
        int key = arr[i];  // Поточний елемент для вставки
        int j = i - 1;

        // Переміщення елементів, більших за key, на одну позицію вперед
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = key;  // Вставка key у правильну позицію
    }
}

Варіанти задач

Варіант 1

Відсортуйте за спаданням одновимірний масив. Використовуйте функції: RandArr, PrintArr, SortArr_1, SwapArr.

Варіант 2

Відсортуйте за зростанням одновимірний масив. Використовуйте функції: RandArr, PrintArr, SortArr_2.

Варіант 3

Відсортуйте за спаданням кожну половину одновимірного масиву. Використовуйте функції: RandArr, PrintArr, SortArr_1, SwapArr.

Варіант 4

Відсортуйте за зростанням кожну половину одновимірного масиву. Використовуйте функції: RandArr, PrintArr, SortArr_2.

Варіант 5

Відсортуйте першу половину одновимірного масиву за спаданням, а другу половину за зростанням. Використовуйте функції: RandArr, PrintArr, SortArr_1, SwapArr.

Варіант 6

Відсортуйте першу половину одновимірного масиву за зростанням, а другу половину за спаданням. Використовуйте функції: RandArr, PrintArr, SortArr_2, SwapArr.

Варіант 7

Відсортуйте за зростанням елементи одновимірного масиву між першим та останнім додатними елементами. Якщо хоча б один із елементів не знайдено, то вивести повідомлення. Використовуйте функції: RandArr, PrintArr, FindFirst, FindLast, SortArr_1.

Варіант 8

Відсортуйте за спаданням елементи одновимірного масиву між першим та останнім від’ємними елементами. Якщо хоча б один із елементів не знайдено, то вивести повідомлення. Використовуйте функції: RandArr, PrintArr, FindFirst, FindLast, SortArr_2, SwapArr.

Варіант 9

Відсортуйте за зростанням елементи одновимірного масиву між першим та останнім парними елементами. Якщо хоча б один із елементів не знайдено, то вивести повідомлення. Використовуйте функції: RandArr, PrintArr, FindFirst, FindLast, SortArr_1.

Варіант 10

Відсортуйте за спаданням елементи одновимірного масиву між першим парним та останнім непарним елементами. Якщо хоча б один із елементів не знайдено, то вивести повідомлення. Використовуйте функції: RandArr, PrintArr, FindFirst, FindLast, SortArr_2, SwapArr.

Варіант 11

Відсортуйте за зростанням елементи одновимірного масиву між першим мінімальним та останнім максимальним елементами. Якщо масив порожній, то вивести повідомлення. Використовуйте функції: RandArr, PrintArr, IndMin, IndMax, SortArr_1.

Варіант 12

Відсортуйте за спаданням елементи одновимірного масиву до першого мінімального елемента, та за зростанням після нього. Мінімальний елемент залиште на місці. Використовуйте функції: RandArr, PrintArr, IndMin, SortArr_2, SwapArr.

Варіант 13

Відсортуйте за зростанням елементи одновимірного масиву до першого максимального елемента, та за спаданням після нього. Максимальний елемент залиште на місці. Використовуйте функції: RandArr, PrintArr, IndMax, SortArr_1, SwapArr.

Варіант 14

Відсортуйте за зростанням елементи одновимірного масиву до першого максимального елемента, за спаданням між першим та останнім максимальними елементами включно з ними, та за зростанням після останнього максимального. Використовуйте функції: RandArr, PrintArr, IndMax (дві функції: для першого та для останнього), SortArr_2, SwapArr.

Варіант 15

Відсортуйте за спаданням елементи одновимірного масиву до першого мінімального елемента, за зростанням між першим та останнім мінімальним елементами включно з ними, та за спаданням після останнього мінімального. Використовуйте функції: RandArr, PrintArr, IndMin (дві функції: для першого та для останнього), SortArr_1, SwapArr.

Варіант 16

Відсортуйте за зростанням два одновимірні масиви: arr1 з n елементів та arr2 з m елементів. Використовуйте функції: RandArr, PrintArr, SortArr_2. Напишіть функцію з прототипом MergeArr(int* arr1, int n, int* arr2, int m, int* arr3), яка зливає масиви arr1 та arr2 у масив arr3, не порушуючи зростання. Масив arr3 не сортувати!

Варіант 17

Відсортуйте за спаданням два одновимірні масиви: arr1 з n елементів та arr2 з m елементів. Використовуйте функції: RandArr, PrintArr, SortArr_3, SwapArr. Напишіть функцію з прототипом MergeArr(int* arr1, int n, int* arr2, int m, int* arr3), яка зливає масиви arr1 та arr2 у масив arr3, не порушуючи спадання. Масив arr3 не сортувати!

Назад Зміст