- •Лекция 1 Создание консольного приложения
- •2. Консоль. Построение консольного проекта
- •3. Запуск приложения
- •4. Сохранение и редактирование проекта
- •Лекция 2
- •4. Функции форматированного ввода и вывода
- •4.1. Функция форматированного ввода с клавиатуры
- •4.2. Функция форматированного вывода на экран
- •5. Математические функции
- •Лекция 3 Линейные вычислительные процессы
- •1. Алгоритм. Управляющие структуры
- •2. Линейные вычислительные алгоритмы
- •Лекция 4 Разветвляющиеся вычислительные процессы
- •1. Управляющая структура «развилка». Логические операции и операции отношения
- •2.1. Условный оператор if()
- •2.2. Условное выражение
- •2.3. Оператор выбора switch()
- •Лекция 5 Программирование разветвляющихся вычислительных процессов
- •Лекция 6 Циклические вычислительные процессы.
- •1. Типы циклов
- •3. Операторы безусловного перехода
- •Лекция 7 Вычисление последовательностей
- •4. Примеры вычисления последовательностей
- •5. Структура алгоритмов вычисления рекуррентных последовательностей
- •Лекция 8 Одномерные массивы
- •1. Массивы
- •1.1. Примеры программ обработки одномерных массивов
- •Лекция 9 Алгоритмы сортировки одномерных массивов
- •1. Сортировка одномерных массивов
- •1.1. Метод пузырька (метод обменной сортировкой с выбором)
- •1.2. Сортировка выбором
- •1.3. Сортировка простыми вставками
- •Лекция 10 Двухмерные массивы
- •1. Двухмерные массивы
- •Лекция 11 Алгоритмы матричной алгебры
- •1. Алгоритмы матричной алгебры
- •Лекция 12 Динамические массивы
- •1. Память компьютера. Адресное пространство
- •2. Динамическая память
- •3. Адреса и указатели
- •4. Указатели и массивы. Динамические массивы
- •5. Проблемы, связанные с указателями
- •6. Поразрядные операции
- •Лекция 13
- •1.2. Способы объявления и обращения к элементам двухмерных массивов
- •Лекция 14 Символы и строки
- •1. Символьный тип данных
- •2. Строки
- •Лекция 15 Структуры
- •1. Понятие структуры
- •2. Определение нового имени типа
- •3. Массивы структур. Указатели на структуры
- •3.1. Определение статического массива структур
- •3.1. Определение динамического массива из n структур
- •Лекция 16 Файлы
- •1. Потоковый ввод-вывод данных
- •3. Понятие файла. Функции работы с файлами
- •Лекция 17 Файлы
- •Лекция 18 Функции пользователя
- •I. Приёмы построения алгоритмов
- •2. Понятие функции
- •2.1. Определение функции
- •2.2. Область видимости переменных
- •2.3. Параметры функции
- •2.4. Описание функции
- •2.5. Организация вызова функции
- •2.5. Передача параметров в функцию
- •Лекция 19 Многофайловые программы
- •1. Создание многофайловой программы. Создание и добавление головного файла в проект
- •3. Рекурсия
- •Лекция 20 Нахождение приближенного значения корня нелинейного уравнения
- •На отрезке [a;b] с заданной точностью eps
- •1.1. Метод дихотомии (половинного деления)
- •1.2. Метод хорд
- •1.3. Метод касательных (Ньютона)
- •Лекция 21 Нахождение приближенного значения определенного интеграла
- •1. Нахождение приближенного значения определенного интеграла с заданной точностью
- •Лекция 22 Объектно-ориентированное программирование
- •Полиморфизм – это свойство класса, позволяющее определить одно и то же по имени, но разное по смыслу действие. Основные этапы ооп:
- •Уточнённое имя принадлежит классу (т.Е. Компонентной) функции
- •Лекция 23 Объектно-ориентированное программирование
- •1. Конструкторы и деструкторы
- •Лекция 24 Объектно-ориентированное программирование
- •1. Компонентные данные и компонентные функции
- •1.1. Компонентные данные
- •1.2. Определение компонентных функций
- •Лекция 25 Объектно-ориентированное программирование
- •1. Свойства классов
- •1.1. Наследование классов
- •1.2. Полиморфизм
- •Библиографический список
Лекция 9 Алгоритмы сортировки одномерных массивов
Цели:
познакомиться с некоторыми алгоритмами сортировки массивов и разработки соответствующего проекта в среде Visual C++ 6.0.
1. Сортировка одномерных массивов
Под сортировкой понимается упорядочение элементов некоторой последовательности в нужном порядке (убывания или возрастания). Существует достаточно много алгоритмов сортировок послед-овательностей. Но мы остановимся только на трёх, наиболее простых.
1.1. Метод пузырька (метод обменной сортировкой с выбором)
Идея метода отражена в его названии. Шаг сортировки состоит в проходе снизу вверх по массиву. По пути просматриваются пары соседних элементов. Если элементы некоторой пары находятся в неправильном порядке, то они меняются местами. При этом самые «легкие» (наименьшие) элементы массива «всплывают» наверх, а самые «тяжелые» – «тонут». Алгоритмически это можно реализовать следующим образом. Весь массив просматривается снизу вверх, стоящие рядом элементы меняются в том случае, если «нижний» элемент меньше, чем «верхний». Таким образом, наверх «всплывет» самый «легкий» элемент всего массива. Так нужно повторять для оставшихся неотсортированными N-1 элементов (т.е. для тех, которые лежат «ниже» первого) и т.д. Алгоритм достаточно прост:
Алгоритм (в порядке возрастания) |
Программа |
объявление вещ: t[10],x, цел:i,j,k,flag для i=0 до 10-1 шаг 1 ввод t[i] все_для i для i=10-1 до 1 шаг -1 //обмена не было flag=0 для j=0 доi-1 шаг 1 если t[j]>t[j+1] //меняем местами два соседних //элемента x=t[j] t[j]=t[j+1] t[j+1]=x //обмен состоялся flag=1 все_если все_для j если flag==0 выход из цикла по i// не было // обмена все_если все_для i для i=0 до 10-1 шаг 1 вывод t[i] все_для i
|
#include "stdio.h" #include "math.h" #define N 10 int main ( ) { float t[N], x; int i, j, k, flag; // ввод массива t с клавиатуры for ( i=0; i<=N-1; i++ ) { printf ("x[%i]= " ,i ); scanf ("%f", &t[i]); } for ( i=N-1; i>=1; i-- ) { //обмена не было flag=0; for(j=0;j<=i-1;j++ ) { if(t[j]>t[j+1]) { // элементы меняются // местами x=t[j]; t[j]=t[j+1]; t[j+1]=x; //обмен состоялся flag=1; } } if(flag= =0) //если обмена не было, то нужно //выйти из цикла break; } // вывод массива tна экран for (i=0; i<=N-1; i++) printf ("%.3f ", t[i]); printf ("\n"); return 1; } |