Загрузка данных


#include <iostream>
#include <vector>
#include <cstdlib>   // для rand(), srand()
#include <ctime>     // для time()
#include <algorithm> // для swap()

using namespace std;

// --- 1. ПУЗЫРЬКОВАЯ СОРТИРОВКА (простой обмен) ---
void bubbleSort(vector<int>& arr) {
    int n = arr.size();
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                swap(arr[j], arr[j + 1]);
            }
        }
    }
}

// --- 2. СОРТИРОВКА ПРОСТЫМ ВЫБОРОМ ---
void selectionSort(vector<int>& arr) {
    int n = arr.size();
    for (int i = 0; i < n - 1; i++) {
        int min_idx = i;
        for (int j = i + 1; j < n; j++) {
            if (arr[j] < arr[min_idx]) {
                min_idx = j;
            }
        }
        swap(arr[min_idx], arr[i]);
    }
}

// --- 3. СОРТИРОВКА ПРОСТЫМИ ВСТАВКАМИ ---
void insertionSort(vector<int>& arr) {
    int n = arr.size();
    for (int i = 1; i < n; i++) {
        int key = arr[i];
        int j = i - 1;
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = key;
    }
}

// --- 4. СОРТИРОВКА ШЕЛЛА ---
void shellSort(vector<int>& arr) {
    int n = arr.size();
    for (int gap = n / 2; gap > 0; gap /= 2) {
        for (int i = gap; i < n; i++) {
            int temp = arr[i];
            int j;
            for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) {
                arr[j] = arr[j - gap];
            }
            arr[j] = temp;
        }
    }
}

// --- ФУНКЦИЯ ВЫВОДА МАССИВА НА ЭКРАН ---
void printArray(const vector<int>& arr) {
    for (int x : arr) cout << x << " ";
    cout << endl;
}

// --- ГЛАВНАЯ ФУНКЦИЯ ---
int main() {
    srand(time(0)); // Инициализация генератора случайных чисел

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

    vector<int> arr(n);

    // --- ВЫБОР СПОСОБА ЗАПОЛНЕНИЯ ---
    int choice;
    cout << "\nКак заполнить массив?\n";
    cout << "1 - Ввести числа вручную\n";
    cout << "2 - Заполнить случайными числами\n";
    cout << "Ваш выбор: ";
    cin >> choice;

    if (choice == 1) {
        // Ручной ввод
        cout << "Введите " << n << " чисел через пробел: ";
        for (int i = 0; i < n; i++) {
            cin >> arr[i];
        }
    } else {
        // Случайные числа
        for (int i = 0; i < n; i++) {
            arr[i] = rand() % 100; // числа от 0 до 99
        }
        cout << "Массив заполнен случайными числами.\n";
    }

    // --- ВЫВОД ИСХОДНОГО МАССИВА ---
    cout << "\nИсходный массив: ";
    printArray(arr);

    // --- ВЫБОР СОРТИРОВКИ ---
    int sortChoice;
    cout << "\nКакой сортировкой отсортировать?\n";
    cout << "1 - Пузырьковая (простой обмен)\n";
    cout << "2 - Простым выбором\n";
    cout << "3 - Простыми вставками\n";
    cout << "4 - Шелла\n";
    cout << "Ваш выбор: ";
    cin >> sortChoice;

    // --- ВЫЗОВ НУЖНОЙ СОРТИРОВКИ ---
    switch (sortChoice) {
        case 1: bubbleSort(arr);    break;
        case 2: selectionSort(arr); break;
        case 3: insertionSort(arr); break;
        case 4: shellSort(arr);     break;
        default: cout << "Неверный выбор!\n"; return 1;
    }

    // --- ВЫВОД РЕЗУЛЬТАТА ---
    cout << "\nОтсортированный массив: ";
    printArray(arr);

    return 0;
}