- •Овсянник в.Н. Лабораторные работы по курсу «Объектно-ориентированное программирование»
- •1.Интегрированная среда mvs-2010
- •1.1.Методические указания
- •2.Массивушки и подпрограммочки
- •Прочитайте это задание и методические указания до конца, прежде чем терзать клавиатуру, соседа, преподавателя и пр. Сущности
- •Попробуйте сдать работу, предварительно тщательно протестировав ее на предмет отсутствия хомутов
- •2.1.Методические указания
- •3.Поиск экстремумов с ограничениями или «Брачное агенство»
- •Постановка задачи
- •Задание
- •Листинг файла mAgency.Cpp (с главной функцией)
- •Листинг файла Lib.H
- •Листинг файла Lib.Cpp
- •4.Задача «куча камней»
- •4.1.Постановка задачи.
- •4.2.Методические указания.
- •Некоторые примеры разделения камней на две кучи, которые должна решать ваша программа
- •5.Разработка простого класса
- •5.1.Задание
- •5.2.Описание вариантов заданий
- •5.3.Драгоценные методические указания
- •6.Класс вектор
- •6.1.Пример класса tVector
- •6.2.Класс tVector с перегруженными операциями
- •7.Наследование классов
- •7.1.Задание
- •7.2.Методическая помощь
- •7.3.Описание самых легких вариантов заданий
- •7.4.Контроль качества выполненной работы
- •8.Приложение с окном вида
- •9.Абстрактные классы и виртуальные функции
- •9.1.Задание
- •9.2.Методические указания
- •Void PrintClassNamе1(cBasе *pb) // параметр-указатель
- •Void PrintClassNamе2(cBasе &b) // параметр-ссылка
- •Void PrintClassNamе3(cFirst f) // параметр-значение
- •9.3.Варианты заданий
- •10.Разработка класса контейнера
- •10.1.Задание
- •10.2.Описание вариантов заданий
- •10.3.Методические указания
- •12.Перегрузка векторных и матричных операций
- •12.1.Задание
- •12.2.Бесценные методические указания
- •12.3.Некоторые особенности перегрузки операций
- •12.4.Варианты заданий
- •13.Программирование односвязного списка
- •13.1.Задание
- •13.2.Описание вариантов заданий
- •14.Приложение, основанное на модальном диалоговом окне
- •14.1.Нудные методические указания Модальные и немодальные диалоговые окна
- •Ресурсы и элементы управления
- •Сценарий создания приложения
- •Разбор приложения
- •Усовершенствование приложения
- •15.Приложения
- •15.1.Виды сортировок
- •Классификация сортировок
- •Сортировка массивов
- •15.2.Алгоритм сортировки включением
- •Пример сортировки с помощью прямого включения
- •15.3.Сортировка Шелла
- •Список литературы
15.Приложения
15.1.Виды сортировок
Сортировка – процесс перегруппировки заданного множества объектов в некотором определенном порядке.
Сортировка в программировании – это упорядочивание элементов в возрастающем или убывающем порядке.
Цель сортировки – облегчить последующий поиск элементов в отсортированном множестве.
Основные из наиболее важных применений сортировки:
решение задачи «группировки», когда нужно собрать вместе все элементы с одинаковым значением некоторого признака;
сортировка двух или более файлов в одном и том же порядке, позволяющая отыскать в них все общие элементы за один последовательный просмотр всех файлов без возвратов;
сортировка может сделать вывод результатов ЭВМ более удобными для человеческого восприятия.
Классификация сортировок
Обычно сортировки подразделяют на два класса:
внутренние сортировки, когда все сортируемые элементы хранятся в быстрой оперативной памяти. Отличительной особенностью является следующее: сортировка должна экономно использовать память. Это предполагает, что перестановки должны выполняться на одном и том же месте. Поэтому к внутренним методам сортировок относятся методы сортировки массивов, т.к. массивы располагаются во «внутренней» оперативной памяти, для которой характерны быстрый произвольный доступ к элементам.
внешние сортировки, когда все сортируемые элементы не помещаются в оперативной памяти. Поэтому к внешним сортировкам относят сортировку файлов, которые располагаются в более медленной, но более вместительной «внешней» памяти, т.е. на запоминающих устройствах.
Принципиальное различие в составлении алгоритмов внутренних и внешних сортировок обусловлено способом доступа к элементам массивов и файлов: в массиве любой элемент виден и доступен (рис. 1); в файле виден текущий элемент (рис. 2).
Рисунок 1 – Сортировка массива Рисунок 2 – Сортировка файлов
Внутренние методы сортировки, в свою очередь, делятся на простые и улучшенные методы.
К простым методам сортировок можно отнести:
сортировки с помощью включения (by insertion);
сортировки с помощью выбора (by selection);
сортировки с помощью обмена (by exchange).
К улучшенным методам относятся:
сортировка Шелла;
пирамидальная сортировка;
быстрая сортировка.
К внешним сортировкам относятся:
сортировка простым слиянием;
сортировка естественным слиянием;
многопутевое слияние;
многофазная сортировка;
каскадная сортировка.
Сортировка массивов
Основным критерием оценки для внутренних сортировок является экономное использование доступной памяти. Методы, в которых элементы из массива а передаются в результирующий массив b, представляют существенно меньший интерес. Для классификации методов сортировки хорошей мерой эффективности может быть число необходимых сравнений ключей (С) и число пересылок (перестановок) элементов (М).
Хотя хорошие алгоритмы сортировки требуют порядка n*logn сравнений, сначала разберем несколько простых и очевидных методов, называемых простыми, где требуется порядка n2 сравнений элементов.
Алгоритмы прямых методов следует изучить по следующим причинам:
прямые методы особенно удобны для объяснения характерных черт основных принципов большинства сортировок;
программы этих методов легко понимать, и они коротки – а ведь сами программы также занимают память;
усложненные методы требуют небольшого числа операций, но эти операции обычно сами более сложные, и поэтому для достаточно малых n прямые методы оказываются более быстрыми, хотя при больших n их использовать не следует.
