- •Объектно-ориентированное программирование Курсовой проект «Сортировка и поиск в массивах»
- •Введение
- •1.Алгоритмы сортировки
- •1.1.Сортировка методом пузырька
- •1.2.Сортировка методом Выбора (метод локального минимума)
- •1.3.Сортировка методом Вставки
- •1.4.Сортировка Быстрым методом
- •2.Алгоритмы поиска
- •2.1.Прямой поиск
- •2.2.Бинарный поиск
- •2.3.Интерполяционный поиск
- •3.Реализация оценки эффективности алгоритмов в программе
- •3.1.Исходные данные
- •3.2.Способы оценки эффективности
- •3.3.Реализация подсчета кол-ва сравнений, присваиваний и эффективности в программе
- •3.4.Реализация замера времени выполнения алгоритмов сортировки в программе
- •3.5.Реализация представления результата в программе
- •4.Результат определения эффективности алгоритмов
- •5.Структура прграммы
- •5.1.Интерфейс программы
- •5.2.Описание структуры программы
- •5.2.1.Глобальная структура для хранения статистики
- •5.2.2.Основной модуль Unit1.Cpp (для Формы Form1)
- •5.2.3.Модуль Unit2.Cpp (для Формы GrafForm)
- •6.4.Файл Unit2.Cpp
- •Заключение
- •Список используемой литературы
5.Структура прграммы
5.1.Интерфейс программы
Интерфейс программы состоит из двух форм – Form1 (рис.5.1.) – основной формы и формы вывода графика (диаграммы) – GrafForm (рис.5.2.). На рисунках дополнительно указаны программные имена всех элементов управления, динамически задействованных в ходе выполнения программы.
Рис. 5.9. Главная форма Form1
Рис. 5.10. Форма вывода графиков и диаграмм GrafForm
5.2.Описание структуры программы
5.2.1.Глобальная структура для хранения статистики
Так как в программе реализован вывод статистики по всем методам сортировки для всех размерностей, эту статистику надо где-то хранить для обращения к ней из любого участка программы, в том числе и из Формы вывода графика GrafForm. Форма GrafForm, для вывода графиков (диаграмм) использует информацию результатов сортировки (статистику). Для хранения этой статистики в программе была создана глобальная структура с необходимыми полями для хранения эффективности метода сортировки (время выполнения, кол-во сравнений, присваиваний и рассчитанная эффективность), а также массив из четырех элементов этой структуры для каждого из четырех методов сортировки. Эта структура описывается в заголовочном файле Unit1.h в разделе public, к которой можно обращаться из любой Формы программы. Для этого необходимо включить этот заголовочный файл в другой Форме, используя инструкцию #include. Вид глобальной структуры и массив из четырех элементов этой структуры для хранения статистики представлен ниже (описывается в Unit1.h в разделе public):
// структура для хранения результатов сортировки
struct MethodsStat
{
// название метода сортировки
AnsiString Name;
// кол-во сравнений
// первая размерность - для убывающей и случайной порядков заполнения
// вторая размерность - для каждой размерности массива (5,7,9,25 элементов)
unsigned int Compares[2][4];
// кол-во присваиваний
// первая размерность - для убывающей и случайной порядков заполнения
// вторая размерность - для каждой размерности массива (5,7,9,25 элементов)
unsigned int Changes[2][4];
// эффективность
// первая размерность - для убывающей и случайной порядков заполнения
// вторая размерность - для каждой размерности массива (5,7,9,25 элементов)
int Eff[2][4];
// время сортировки
// первая размерность - для убывающей и случайной порядков заполнения
// вторая размерность - для каждой размерности массива (5,7,9,25 элементов)
double Tsort[2][4];
};
// создаем массив из 4-х элементов для каждого метода сортировки
MethodsStat Methods[4];
Теперь, при обращении к функциям сортировки, возвращающие эффективность сортировки в виде кол-ва присваиваний, сравнений, эффективности и времени выполнения в качестве параметров можно сразу указывать этот массив со структурами, указав соответствующее поле.
5.2.2.Основной модуль Unit1.Cpp (для Формы Form1)
Как описывалось в предыдущем разделе, программа повсеместно оперирует со статистикой, используя глобальный массив структур, описанный в п.5.2.1. Поэтому в качестве параметров вызова каждой функции сортировки передаются соответствующие поля этой структуры.
В основном модуле предусмотрены глобальные переменные:
short arSizes[4] = {5,7,9,25} - массив для определения размерностей массивов. Этот массив нужен для того, чтобы в различных функциях в цикле проходить по всем размерностям.
const MaxSize = 25 – константа, хранящая максимальную размерность исходных массивов
short CurSize – переменная для хранения индекса текущей размерности. Сама размерность берется из arSizes. Так как согласно интерфейсу, в один момент времени может быть выбрана только одна размерность (Радио-кнопки – переключатели), то эта переменная нужна для хранения текущей размерности и использования ее в функциях сортировки (по ее значению определяется размерность текущего исх.массива путем обращения к массиву arSizes).
short arSource[2][4][MaxSize] – исходный массив. Сделан глобальным для обращения к нему из любой части основного модуля. Первая размерность [2] – служит для определения убывающей или случайного порядков заполнения. Вторая размерность [4] – указывает на размер массива (индекс для arSizes). Третья размерность [MaxSize] – сам исходный массив.
short arRes[2][MaxSize] – массив с результатом сортировки. Сделан глобальным для обращения к нему из любой части основного модуля, исключая его повторное создание. Первая размерность [2] – служит для определения убывающей или случайного порядков заполнения. Вторая размерность [MaxSize] хранит сам отсортированный массив.
unsigned int SortCount – переменная для хранения кол-ва повторений сортировок (для определения времени выполнения), введенных пользователем. Сделана глобальной для обращения к ней из любой части программы.
double t_copy – переменная для хранения времени, необходимое для копирования из массива в массив SortCount раз. Используется для более точного замера времени выполнения алгоритмов сортировки (это время вычитается из времени выполнения сортировки, т.к. нам не нужно учитывать время на копирование из массива в массив).
Помимо самих функций сортировки и поиска, в соответствии с интерфейсом в программе присутствует множество вспомогательных функций:
Функции-обработчики событий элементов управления
Функции подготовки, вывода и очистки результатов сортировки
Функция проверки прохождения по всем методам сортировки
Функции очистки и вывода информации о текущей операции
Функции инициализации прогресс-бара, изменения различных глобальных переменных в зависимости от события, заполнения массивов значениями, инициализации начальных значений массивов и переменных при старте программы и т.д.
Функция прохождения всех сортировок по всем размерностям в автоматическом режиме, нажатием одной кнопки.
Сортировка быстрым методом отличается по своей реализации от других методов за счет рекурсивных вызовов, поэтому она состоит из трех функций – Функция сортировки с подсчетом эффективности, Функция сортировки без подсчета эффективности и Функция, в которой вызываются подряд эти функции. Первая вызывается для определяется эффективности, а вторая вызывается SortCount раз для замера времени выполнения алгоритма.
Остальные сортировки состоят из одной функции, в которой дважды дублируется подряд алгоритм сортировки. В первом дубле подсчитывается эффективность (сравнения и присваивания). Во втором дубле замеряется время выполнения алгоритма, повторяющегося SortCount раз (здесь подсчет эффективности уже не ведется).
В остальном, структура программы не требует более подробного описания, т.к. взаимосвязь указанных функций наглядно представлена в листинге программы с подробными комментариями.