/*
* Заголовочный файл для работы с консолями. Содержит в себе пространство имён std
* которое, в свою очередь, содержит такие классы, как:
* std::cin - ввод в переменную с клавиатуры.
* std::cout - вывод чего-либо на экран.
* std::endl - символ переноса строки, эквивалент \n. И т.д.
*/
#include <iostream>
/*
* Использование пространства имён std.
* Позволяет нам писать cin, cout, endl... без указания std:: в начале
*/
using namespace std;
/*
* Функция сортировки обменами (Sort1), не возвращает никаких данных (внутри просто меняет индексы массива местами и выводит в консоль)
* 1 аргументом функции является указатель на целочисленный массив int *mass\
* 2 аргументом функции является целочисленное значение размерности массива (сколько в нем элементов)
*/
void Sort1(int *mass, int size) {
int tmp; // переменная, которая будет хранить временное значение
for (int i = 0; i < size - 1; ++i) { // цикл от 0 до размерности массива вычесть 1
for (int j = 0; j < size - 1; ++j) { // цикл от 0 до размерности массива вычесть 1
if (mass[j + 1] < mass[j]) { // условие, если mass[j + 1] меньше mass[j], то код внутри, в противном случае ничего
// проверяем следующий элемент массива с текущим, если следующий меньше, то выполняется условие и весь код ниже
tmp = mass[j + 1]; // присваиваем временной переменной значение из массива с ключом j + 1, чтобы поменять местами с текущим
mass[j + 1] = mass[j]; // присваиваем следующему элементу массива значение текущего
mass[j] = tmp; // присваиваем текущему элементу массива значение из переменной tmp (в которую ранее записали значение mass[j + 1], которое позже заменили текущим)
for (int j = 0; j < size; ++j) { // цикл от 0 до размерности массива
cout << mass[j] << " "; // вывод массива поэлементно в консоль
}
}
}
cout << endl;
}
cout << endl;
}
/*
* Функция сортировки выбором (Sort2), не возвращает никаких данных (внутри просто меняет индексы массива местами и выводит в консоль)
* 1 аргументом функции является указатель на целочисленный массив int *mass\
* 2 аргументом функции является целочисленное значение размерности массива (сколько в нем элементов)
*/
void Sort2(int *mass, int size) {
int tmp; // переменная, которая будет хранить временное значение
for (int i = 0; i < size; ++i) { // цикл от 0 до size
int pos = i; // переменная указатель индекса массива
tmp = mass[i]; // присваиваем временное значение для текущего элемента массива
for (int j = i + 1; j < size; ++j) { // цикл от i + 1 до размерности массива
if (mass[j] < tmp) { // если следующий элемент массива меньше временного значения, то код внутри фигурных скобок, в противном случае ничего
pos = j; // устанавливаем указатель на текущий элемент j
tmp = mass[j]; // устанавливаем временное значение
}
}
mass[pos] = mass[i]; // меняем местами, устанавливаем по полученному выше указателю значение текущего элемента
mass[i] = tmp; // устанавливаем текущему элемент значение временной переменной, полученной выше
for (int i = 0; i < size; ++i) { // цикл от 0 до размерности массива
cout << mass[i] << " "; // вывод массива на экран
}
cout << endl;
}
}
/*
* Функция сортировки простыми вставками (Sort3), не возвращает никаких данных (внутри просто меняет индексы массива местами и выводит в консоль)
* 1 аргументом функции является указатель на целочисленный массив int *mass\
* 2 аргументом функции является целочисленное значение размерности массива (сколько в нем элементов)
*/
void Sort3(int *mass, int size) {
int tmp; // переменная, которая будет хранить временное значение
for (int i = 1, j; i < size; i++) { // цикл от 0 до size
tmp = mass[i]; // присваиваем временное значение для текущего элемента массива
for (j = i - 1; j >= 0 && mass[j] > tmp; --j) { // цикл от i - 1 пока j >= 0 && mass[j] > tmp, и он с большего значение к меньшему (--j)
mass[j + 1] = mass[j]; // присваиваем следующему элементу значение текущего внутри этого цикла
}
mass[j + 1] = tmp; // присваиваем следующему элементу значение временной переменной
for (int i = 0; i < size; i++) { // цикл от 0 до size
cout << mass[i] << " "; // вывод массива на экран поэлементно
}
cout << endl;
}
}
int main() {
/*
* выделение памяти для переменных целочисленного типа (целые числа)
* a - переменная для выбора пользователем метода сортировки (1, 2, 3, или любое значение(вызовет первый метод сортировки))
* size - размерность массива (сколько в нем будет храниться элементов)
*/
int a, size;
cout << "Zadaite razmer massiva: "; // вывод текста в консоль
cin >> size; // ввод пользователем с клавиатуры значения в переменную size
int *mass = new int[size]; // выделение памяти для массива целочисленных значений, размерностью size
for (int i = 0; i < size; i++) { // цикл от 0 до size (ту, что ввел пользователь)
cout << "VVedite " << i << " element massiva: "; // вывод текста в консоль
cin >> mass[i]; // ввод пользователем с клавиатуры значения в массив mass[i], где i это ключ элемента массива массива
}
cout << endl << "Vibirite metod sortirovki "; // вывод текста в консоль, endl - перенос строки
cin >> a; // ввод пользователем с клавиатуры значения в переменную a (выбор метода)
for (int i = 0; i < size; i++) { // цикл от 0 до size (ту, что ввел пользователь)
cout << mass[i] << " "; // вывод текста в консоль, mass[i] - это i-ый элемент массива mass
}
cout << endl;
/*
* switch-case это удобная замена длинной if-else конструкции
* если написать этот код с помощью условий, то он будет выглядеть так:
* if(a == 1){
* Sort1(mass, size);
* } elseif(a == 2) {
* Sort2(mass, size);
* } elseif(a == 3) {
* Sort3(mass, size);
* } else {
* Sort1(mass, size);
* }
*/
switch (a) {
case 1: // если a равно 1
Sort1(mass, size); // вызов функции сортировки обменами + передача в него массива (mass) и его размерности (size)
break;
case 2: // если a равно 2
Sort2(mass, size); // вызов функции сортировки выбором + передача в него массива (mass) и его размерности (size)
break;
case 3: // если a равно 3
Sort3(mass, size); // вызов Функции сортировки простыми вставками + передача в него массива (mass) и его размерности (size)
break;
default: // если a равно любому другому значению, то вызов функции сортировки обменами + передача в него массива (mass) и его размерности (size)
Sort1(mass, size);
break;
}
return 0;
}