- •Алгоритм.
- •Множественный выбор switch.
- •Оператор do … while ( с постусловием ).
- •Do оператор ;
- •Оператор цикла for.
- •Использование операторов break и continue в циклах.
- •Функции ввода-вывода.
- •Общий вид программы.
- •Вложенные циклы.
- •Адреса и указатели.
- •Массивы.
- •Int a[10] ; // целочисленный вектор из 10 элементов.
- •Векторы.
- •Сортировка вектора.
- •Матрицы.
- •Строки.
- •Подпрограммы.
- •Директива препроцессора #define .
- •Области видимости.
- •Классы памяти.
- •Рекурсия.
- •Подготовка к зачету.
- •Структуры.
- •Int ball [4] ; // описание третьего поля – оценки.
- •Очередь.
- •Линейные списки.
- •Деревья.
- •Int n, k ; // ее размерности
- •Void print ( void ) // печать матрицы
- •Определение методов вне класса.
- •Частные и общие данные.
- •Конструктор.
- •Перегрузка операторов.
- •Неявный указатель *this.
- •Дружественные функции.
- •Класс множество.
- •Наследование.
- •Объекто-ориентированное программирование.
- •Список вопросов к экзамену.
- •Литература.
Сортировка вектора.
Существует огромное количество различных алгоритмов сортировки. Рассмотрим самые простые из них. Сортировка вектора по возрастанию (убыванию) значений его элементов.
Сортировка выбором.
Рассмотрим вектор 11 4 -3 5 10 8 12 6 4 0 отсортируем его значения по убыванию.
Найдем максимальный элемент вектора - 12. Переставим местами первый элемент и максимальный.
12 4 -3 5 10 8 11 6 4 0 Теперь рассмотрим вектор начиная со второго элемента, найдем в нем
12 11 -3 5 10 8 4 6 4 0 максимум – 11, переставим его местами со вторым элементом, и т. д.
12 11 10 5 -3 8 4 6 4 0 пока не останется один элемент вектора, соответственно самый
12 11 10 8 -3 5 4 6 4 0 маленький.
12 11 10 8 6 5 4 -3 4 0
12 11 10 8 6 5 4 4-3 0
12 11 10 8 6 5 4 4 0-3
Рассмотрим программу, реализующую данный алгоритм.
int vec[10]={ 11, 4, -3, 5, 10, 8, 12, 6, 4, 0 } ;
int i, j, max, nmax ;
for ( i=0 ; i<10 ; i++)
{
max=vec[i] ;
nmax=i ;
for ( j=i ; j<10 ; i++)
if ( max< vec[j]) {
max=vec[j] ;
nmax=j ;
}
vec[nmax]=vec[i] ;
vec[i]=max ;
}
for ( i=0 ; i<10 ; i++) printf(“%d “, vec[i]) ;
Очевидно, если ввести с экрана любой другой вектор, то алгоритм будет работать и для него.
Пузырьковая сортировка.
Рассмотрим вектор 11 4 -3 5 10 8 12 6 4 0 отсортируем его значения по убыванию.
Рассмотрим пару соседних элементов, 11 4, если предыдущий меньше последующего, то переставим их местами, в противном случае оставим все без изменения и перейдем к соседней паре 4 -3. Продолжая таким образом двигаться по вектору, к концу первого прохода «всплывет» самый маленький элемент.
11 4 5 -3 10 8 12 6 4 0
11 4 5 10 -3 8 12 6 4 0
11 4 5 10 8 -3 12 6 4 0
11 4 5 10 8 12 -3 6 4 0
11 4 5 10 8 12 6 -3 4 0
11 4 5 10 8 12 6 4 -3 0
11 4 5 10 8 12 6 4 0 -3
Далее алгоритм повторяется с первого до предпоследнего элемента, «всплывает» следующий самый маленький.
11 5 10 8 12 6 4 4 0 -3
Теперь два последних элемента стоят на своих местах, повторяем процесс, не доходя два элемента до конца и т. д. пока не останется на первом месте самый большой элемент.
11 5 10 8 12 6 4 4 0 -3 …
12 11 10 8 6 5 4 4 0 -3
Попробуйте составить программу, она точно также как предыдущая будет иметь два вложенных цикла.
3. Сортировка вставкой.
Рассмотрим вектор 11 4 -3 5 10 8 12 6 4 0 отсортируем его значения по убыванию.
Будем считать первый элемент вектора упорядоченным, возьмем второй и найдем его место в этом упорядоченном векторе. В общем случае вставлять можно в начало, в середину и оставаться на месте.
11 4 -3 5 10 8 12 6 4 0 оставляем на месте, теперь рассмотрим упорядоченный вектор из двух
11 4 -3 5 10 8 12 6 4 0 элементов, найдем в нем место третьего. Опять остается на месте.
11 5 4-3 10 8 12 6 4 0 А вот - 5 нужно вставить между 11 и 4, после чего вектор из четырех
элементов будет упорядочен. Дальше ищем место - 10 и т. д. пока
12 11 10 8 6 5 4 4 0 -3 весь вектор не станет упорядоченным.
Попробуйте составить программу, она точно также как сортировка выбором будет иметь два вложенных цикла. С точки зрения реализации этот алгоритм наиболее сложен, за то число ненужных проходов и просмотров (пузырьковая) в этом случае - минимально.