
- •220300 - Системы автоматизированного проектирования
- •Состав языка и принцип работы компилятора языка высокого уровня
- •Идентификаторы
- •Альтернативный ввод-вывод в стиле с
- •Константы
- •Манипуляторы
- •Преобразования типов
- •Арифметические операции
- •Функции стандартной библиотеки
- •Операции отношения и логические операции
- •Базовые конструкции структурного программирования
- •Цикл с параметром (for)
- •Цикл с предусловием (while)
- •Цикл с постусловием (do while)
- •Рекомендации по программированию циклов
- •Ветвления
- •Условный оператор if
- •Вложенные конструкции
- •Проблемы соответствия if и else во вложенных ветвлениях
- •Условная операция
- •Оператор switch
- •Операторы передачи управления
- •Контрольная работа
- •Массивы
- •Сортировка массива методом выбора
- •Сортировка массива методом пузырька
- •Многомерные массивы
- •Операции со строками
- •Функции
- •Void starline(); // объявление функции (прототип)
- •Передача аргументов в функцию по значению
- •Void charline(char sim, int n); // объявление функции (прототип)
- •Возвращение функцией значения
- •Передача аргументов по ссылке
- •Возвращение значения по ссылке
- •Перегруженные функции
- •Переменные и функции
- •Передача массивов в функции
- •Указатели
- •Указатели и массивы
- •Указатели и функции
- •Указатели и строки
- •Динамический массив и динамическое выделение памяти
- •Ввод/вывод
- •Форматированный ввод/вывод
- •Конструкторы и методы
- •Двоичный ввод/вывод. Бинарные файлы
- •Двунаправленный ввод/вывод
- •Функции стандартной библиотеки для работы с файлами или ввод/вывод в стиле с
Сортировка массива методом выбора
Одной из самых распространённых операций над массивами является их сортировка. Существует множество алгоритмов сортировки массивов, различающихся по поведению, быстродействию, требуемому объёму памяти, а также ограничениям, накладываемым на исходные данные.
Рассмотрим программу, которая сортирует по возрастанию целочисленный массив методом выбора. Алгоритм состоит в том, что выбирается наименьший элемент массива и меняется местами с первым элементом, затем рассматриваются элементы, начиная со второго, и наименьший из них меняется местами со вторым элементом, и так далее n-1 раз (при последнем проходе цикла при необходимости меняются местами предпоследний и последний элементы массива).
int main() {
const int N=5; // кол-во элементов массива
int b[N], i;
cout << "Vvedite " << N << " elementov massiva: " << endl;
for(i=0; i<N; i++) cin >> b[i];
for(i=0; i<N-1; i++) { //цикл сортировки массива
int imin = i; //принимаем за наименьший первый из элементов
for(int j=i+1; j<N; j++)
if(b[j] < b[imin]) imin = j; // поиск минимального
int a = b[i]; //обмен местами:
b[i] = b[imin];
b[imin] = a;
}
cout << "Otsortirovannyi massiv: ";
for(i=0; i<N; i++) cout << b[i] << " ";
getch(); return 0;
}
Рассмотрим в деталях ход выполнения программы. Пусть мы ввели следующие элементы массива:
-
2
5
3
4
1
b[0]
b[1]
b[2]
b[3]
b[4]
Первый шаг: i=0; imin=0; j=1; b[1]<b[0] ложь;
j=2; b[2]<b[0] ложь;
j=3; b[3]<b[0] ложь;
j=4; b[4]<b[0] imin=4 => a=b[0]; b[0]=b[4]; b[4]=a Поменяли местами 0-ой и 4-ый, в результате имеем:
-
1
5
3
4
2
b[0]
b[1]
b[2]
b[3]
b[4]
Второй шаг: i=1; imin=1; j=2; b[2]<b[1] imin=2;
j=3; b[3]<b[2] ложь;
j=4; b[4]<b[2] imin=4; => a=b[1]; b[1]=b[4]; b[4]=a
Поменяли местами 1-ый и 4-ый, в результате имеем: 1 2 3 4 5. И т.д.
Как вы думаете, что необходимо изменить в данной программе, чтобы сортировка производилась по убыванию? Ответ: if(b[j] > b[imin]) imin = j; .
Сортировка массива методом пузырька
Рассмотрим программу сортировки по возрастанию элементов целочисленного массива методом пузырька.
int main() {
const int N=5;
int i, b[N];
cout << "Vvedite " << N << " elementov massiva:" << endl;
for(i=0; i<N; i++) cin >> b[i];
for(i=0; i<N-1; i++) { //цикл сортировки элементов массива
for(int j=i+1; j<N; j++) {
if(b[j] < b[i]) { int a = b[i]; b[i] = b[j]; b[j] = a; }
}
}
cout << "Otsort. massiv: ";
for(i=0; i<N; i++) cout << b[i] << " ";
getch(); return 0;
}
Реализованный в данной программе алгоритм сортировки является самым простым и одновременно самым медленным, суть которого заключается в следующем. Сначала первый элемент сравнивается по очереди с остальными элементами (начиная со второго). Если он больше, чем какой-либо из элементов массива, то эти элементы меняются местами. Когда это будет проделано, то станет известен самый меньший элемент последовательности. Затем второй элемент сравнивается по очереди со всеми остальными, начиная с третьего, и если находится элемент меньший чем второй, они меняются местами и т.д.
Д/З |
Напишите программу, которая ищет и выводит минимальный элемент введённого с клавиатуры массива целых чисел. |
Ответ |
int main() { const int N=5; int i, i_min, arr[N]; cout << "Vvedite " << N << " elementov massiva: " << endl; for(i=0; i<N; i++) cin >> arr[i]; i_min = 0; // предположим, что 1-ый элемент минимальный for(i=1; i<N; i++) { if(arr[i] < arr[i_min]) i_min = i; } cout << "Min. element massiva: " << arr[i_min]; getch(); return 0; } |