Заголовочный файл для работы консолями Содержит себе пространство имён

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/*
* Заголовочный файл для работы с консолями. Содержит в себе пространство имён 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;
}