- •Лекция №1. Заглянем в компьютер Введение
- •Структура компьютера
- •Данные и программы
- •Языки высокого уровня и системы программирования
- •Состав языка
- •Алфавит языка
- •Идентификаторы
- •Ключевые слова
- •Знаки операций
- •Константы
- •Комментарии
- •Концепция типа данных
- •Основные типы данных
- •Целый тип (int)
- •Символьный тип (char)
- •Расширенный символьный тип (wchar_t)
- •Логический тип (bool)
- •Типы с плавающей точкой (float, double и long double)
- •Диапазоны значений простых типов данных для ibm pc
- •Переменные
- •Лекция № 3. Структура программы. Операции. Выражения
- •Структура программы
- •Спецификации формата для функций семейства printf
- •Модификаторы формата
- •Операции
- •Выражения
- •Арифметические преобразования типов
- •Лекция № 4. Структура программы. Операции. Выражения
- •Базовые конструкции структурного программирования
- •Оператор «выражение»
- •Операторы ветвления
- •Условный оператор if
- •If ( выражение) оператор_1; [else оператор_2]
- •Оператор switch
- •Операторы цикла
- •Цикл с предусловием (while)
- •Цикл с постусловием (do while)
- •Цикл с параметром (for)
- •Операторы передачи управления
- •Оператор goto
- •Оператор break
- •Оператор continue
- •Оператор return
- •Лекция 5. Указатели и массивы
- •Указатели
- •Инициализация указателей
- •1. Присваивание указателю адреса существующего объекта:
- •2. Присваивание указателю адреса области памяти в явном виде:
- •3. Присваивание пустого значения:
- •4. Выделение участка динамической памяти и присваивание ее адреса указателю:
- •Операции с указателями
- •Массивы
- •5.1. Стандартные алгоритмы работы с одномерными массивами
- •7. Сортировка целочисленного массива методом пузырьковой сортировкой.
- •5.2. Динамические массивы
- •5.3. Многомерные массивы
- •5.4. Стандартные алгоритмы работы с двумерными массивами
- •Лекция 6. Введение в обработку символов и строк
- •Основы теории символов и строк
- •Функции работы со строками из библиотеки обработки строк
- •Функции работы со строками из библиотеки обработки
- •Работа с символами
- •Модульное программирование Лекция № 7 Функции
- •Функции
- •Объявление и определение функций
- •Глобальные переменные
- •Возвращаемое значение
- •Параметры функции
- •Передача массивов в качестве параметров
- •Передача имен функций в качестве параметров
- •Параметры со значениями по умолчанию
- •Функции с переменным числом параметров
7. Сортировка целочисленного массива методом пузырьковой сортировкой.
Программа (см. ниже) сортирует значения массива а из 10 элементов в возрастающем порядке. Используемая при этом техника получила название пузырьковая сортировка или сортировка погружением, потому что наименьшее значение постепенно «всплывает», продвигаясь к вершине (началу) массива, подобно пузырьку воздуха в воде, тогда как наибольшее значение погружается на дно (конец) массива. Этот прием требует нескольких проходов по массиву. При каждом проходе сравнивается пара следующих друг за другом элементов. Если пара расположена в возрастающем порядке или элементы одинаковы, то мы оставляем значения как есть. Если же пара расположена в убывающем порядке, значения меняются местам в массиве.
Сначала программа сравнивает a[0] и a[l], затем a[l] и a[2], потом a[2] и a[3] и т.д. до тех пор, пока проход не закончится сравнением a[8] и a[9]. Хотя элементов 10, производится только девять сравнений. При выбранном способе последовательных сравнений большое значение может перемещаться в массиве вниз на много позиций за один проход, но малое значение может быть передвинуто вверх только на одну позицию. При первом проходе наибольшее значение гарантированно опустится на место нижнего элемента массива a[9]. При втором проходе второе наибольшее значение гарантированно опустится на место a[8]. При девятом проходе девятое наибольшее значение опустится на место a[l]. Это оставляет наименьшему значению место a[0], так что для сортировки массива из 10 элементов нужно только девять проходов.
Сортировка выполняется с помощью вложенного цикла for. Если необходима перестановка, она выполняется тремя присваиваниями
hold = а [i]; a[i] = a[i + 1]; a[i + 1] = hold;
где дополнительная переменная hold временно хранит одно из двух переставляемых значений. Перестановку нельзя выполнить двумя присваиваниями
a[i] = a[i + 1]; a[i + 1] = a[i];
Если, например, a[i] равно 7, а a[i + 1] равно 5, то после первого присваивания оба значения будут 5, а значение 7 будет потеряно. Следовательно, необходима дополнительная переменная hold.
Главное достоинство пузырьковой сортировки заключается в простоте ее программирования. Однако, пузырьковая сортировка выполняется медленно. Это становится очевидным при сортировке больших массивов.
// Эта программа сортирует значения массива в возрастающем порядке
#include <iostream.h>
#include <iomanip.h>
main() {
const int arraySize = 10;
int a[arraySize] = {2, 6, 4, 8, 10, 12, 89, 68, 45, 37};
int hold;
cout << "Элементы данных в исходном порядке" << endl;
for (int і = 0; і < arraySize; і++)
cout << setw(4) << a[i];
for (int pass = 1; pass < arraySize; pass++) // проход
for (і = 0; і < arraySize - 1; і++) // один проход
if (a[i] > a[i + 1]) { // одно сравнение
hold = a[i]; // одна перестановка
a[i] = a[i + 1];
а[і + 1] = hold;
}
cout <<endl << "Элементы данных в порядке возрастания " << endl;
for (i = 0; i < arraySize; i++)
cout << setw(4) << a[i];
cout << endl; return 0;
}
Идентификатор массива является константным указателем на его нулевой элемент. Например, для массива из предыдущего листинга имя b – это то же самое, что &b[0], а к 1-му элементу массива можно обратиться, используя выражение *(b+i). Можно описать указатель, присвоить ему адрес начала массива и работать с массивом через указатель. Следующий фрагмент программы копирует все элементы массива а в массив b:
int a[100], b[100];
int *pa = а; // или int *p = &a[0];
int *pb = b;
for (int i = 0; i<100; i++)
*pb++ = *pa++; // или pb[i] = pa[i];