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


ШАПКАQ: Что делает #include <iostream>?A: Подключает стандартный заголовочный файл для работы с потоками ввода-вывода, открывая возможность использовать объекты std::cin и std::cout.Q: Что делает using namespace std;?A: Импортирует всё содержимое пространства имен std в текущую область видимости, избавляя от необходимости прописывать std:: перед cout, cin, swap и другими стандартными компонентами.ФУНКЦИЯ log_arrQ: Что означают параметры int* arr и int m?A: arr — это указатель, хранящий адрес первой ячейки массива в памяти. Переменная m передается следом, так как сам указатель не содержит информацию о длине выделенной памяти, и функции нужно знать, где остановиться.Q: Что делает строка cout << "Sortet Array\n";?A: Выводит в консоль текстовую строку-индикатор, оповещающую пользователя о начале вывода отсортированных данных.Q: Что делает цикл for(int i = 0; i < m; i++) { cout << arr[i] << ' '; }?A: Итерируется по элементам массива с индексами от 0 до m-1, последовательно отправляя их значения в поток вывода через пробел.ФУНКЦИЯ bubbleSortQ: Зачем два вложенных цикла?A: Внутренний цикл отвечает за один одиночный проход по элементам и перемещение одной максимальной величины в конец рабочей зоны. Внешний цикл повторяет этот процесс m раз, обеспечивая полную сортировку всех элементов.Q: Что делает конструкция со swap?A: Проверяет упорядоченность соседней пары. Если текущий элемент оказывается больше последующего, они меняются местами. За счет этого крупные значения последовательно сдвигаются в правый край массива.ФУНКЦИЯ shakerSortQ: Что означают переменные left и right?A: Это индексы-маркеры, фиксирующие границы подмассива, который еще предстоит отсортировать (первоначально от 0 до m-1).Q: Что делает условие while (left < right)?A: Поддерживает выполнение алгоритма до тех пор, пока левая граница не встретится с правой, что сигнализирует об окончании сортировки.Q: Что происходит в части с right--?A: Выполняется прогон слева направо для перемещения наибольшего значения в конец, после чего правый маркер сдвигается влево (right--), так как крайняя правая позиция уже занята верным элементом.Q: Что делает часть с left++?A: Выполняется обратный прогон справа налево для смещения наименьшего значения в начало, после чего левый маркер сдвигается вправо (left++), исключая уже отсортированную первую ячейку.ФУНКЦИЯ quickSortQ: Что означают left, right, i, j?A: left и right задают диапазон текущего сегмента массива. i и j выступают в роли подвижных индексов, которые сканируют этот сегмент, двигаясь навстречу друг другу.Q: Что такое pivot?A: Опорный элемент, значение которого берется из середины текущего диапазона для последующего сравнения и разделения массива на две группы.Q: Что делает внутренний цикл с i++?A: Сдвигает левый индекс вправо, пока не наткнется на элемент, нарушающий правило сортировки (значение которого больше либо равно pivot).Q: Что делает цикл с j--?A: Сдвигает правый индекс влево, пока не обнаружит элемент, который меньше либо равен pivot.Q: Что происходит при if(i <= j)?A: Если индексы i и j еще не разошлись, найденные элементы-нарушители меняются местами через swap, после чего оба индекса делают шаг к центру для продолжения проверки.Q: Зачем эти два рекурсивных вызова?A: Позволяют применить тот же алгоритм быстрой сортировки отдельно к левой (содержащей меньшие элементы) и правой (содержащей большие элементы) частям, на которые разделился массив.ФУНКЦИЯ mainQ: Что делает строка int arr2 [6];?A: Резервирует память на стеке под массив из 6 целочисленных значений. Данные в ячейках не инициализированы и содержат случайный системный мусор.Q: Что делает строка srand(time(0));?A: Передает текущее системное время в качестве начального значения (seed) для генератора псевдослучайных чисел, гарантируя уникальность генерируемых чисел при каждом старте.Q: Что делают строки с cin >> m?A: Запрашивают ввод у пользователя через консоль и сохраняют полученное число в переменную m, определяя будущий размер динамического массива.Q: Что означают переменные left и right в main?A: Задают стартовые индексы краев всего массива (0 для начала и m-1 для конца), которые потребуются для инициализации первой итерации quickSort.Q: Что делает строка int* arr = new int[m];?A: Динамически выделяет непрерывный блок памяти в куче (heap) под m переменных типа int и записывает адрес этой области в указатель arr.Q: Что делает строка int** arr1 = new int*[m];? Чем она отличается от int*?A: int* хранит адрес на массив обычных чисел, а int** выделяет память под массив указателей. Это промежуточный шаг, который обычно применяется для создания динамических матриц (двумерных массивов).Q: Что делает строка arr[i] = rand() % 55 - 78;?A: Ограничивает случайное число остатком от деления на 55 (диапазон 0..54), сдвигает его вычитанием 78 в диапазон от -78 до -24, записывает в i-ю ячейку и выводит на экран.Q: Что делает строка while (true)?A: Создает бесконечный цикл обработки, чтобы пользователь мог многократно выбирать разные виды сортировок в меню без перезапуска программы.Q: Что делают строки с cin >> n?A: Отображают список доступных опций программы и считывают код выбранной команды в переменную n.Q: Что делает case 1?A: При выборе единицы передает управление функции bubbleSort, затем обновляет экран с помощью log_arr и через break прерывает выполнение switch, возвращаясь в цикл меню.Q: Что делает case 2?A: Аналогично обрабатывает двойку, запуская для массива алгоритм шейкерной сортировки.Q: Что делает case 3?A: Реализует вызов quickSort, передавая туда массив и его полные границы от left до right, после чего выводит результат.Q: Что делает exit(0)?A: Вызывает системную функцию немедленного завершения процесса с кодом 0, сигнализирующим об успешном закрытии приложения.Q: Когда срабатывает default?A: Выполняется в случае, если введенное значение n не соответствует ни одному из предусмотренных пунктов меню, выводя предупреждение о некорректном вводе.Если хочешь, можем:Исправить утечки памяти (в коде вызывается new, но нет delete, плюс arr1 вообще не используется)Разобрать ошибку с выходом за границы, если в cin >> m ввести число больше 6, так как arr2[6] объявлен жесткоДобавить замер времени работы для каждого алгоритма