
- •Введение
- •Постановка задачи
- •Сортировка
- •Серийный запуск
- •Руководство пользователя
- •Правила ввода аргументов для Exp.Exe
- •Правила ввода аргументов для Tests.Exe Руководство программиста Описание структуры программы
- •Описание структур данных
- •Описание алгоритмов Сортировка пузырьком
- •Приложение 3 Генерация случайных чисел
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
«Нижегородский государственный университет
им. Н.И. Лобачевского»
Факультет вычислительной математики и кибернетики
Отчёт по лабораторной работе
Проведение серийных экспериментов
Выполнил:
студент ф-та ВМК гр. 81-02
Куканова А.А.
Проверил:
ассистент каф. МО ЭВМ, ВМК
Сиднев А.А.
Нижний Новгород
2013 г.
Содержание
Введение 3
Постановка задачи 4
Сортировка 4
Серийный запуск 4
Руководство пользователя 6
Руководство программиста 8
Описание структуры программы 8
Exp.exe 8
Tests.exe 8
Описание структур данных 8
Exp.exe 8
Tests.exe 8
Описание алгоритмов 9
Сортировка пузырьком 9
Сортировка слиянием 9
Результаты экспериментов 10
Функция qsort 10
Сортировка пузырьком 11
Сортировка слиянием 12
Сравнение сортировок 13
Заключение 14
Литература 15
Приложения 16
Приложение 1 16
Сортировка пузырьком 16
Приложение 2 16
Сортировка слиянием 16
Приложение 3 17
Генерация случайных чисел 17
Введение
В большинстве задач, так или иначе связанных с обработкой и анализом какой-либо информации, встает необходимость отсортировать её для удобства обработки и возможности использования эффективных алгоритмов (таких, как бинарный поиск). Как правило, при решении реальных задач необходимо работать с большими массивами данных, поэтому организовать их сортировку необходимо таким образом, чтобы затрачивать как можно меньше ресурсов (в первую очередь, временных). Быстрая обработка поступающей информации также является обязательным условием для корректной работы систем реального времени. Данная лабораторная работа позволяет сравнить три алгоритма сортировки: стандартную функцию qsort библиотеки stdlib.h языков C/C++, в основе которой лежит сортировка Хоара; сортировку слиянием и сортировку пузырьком.
Постановка задачи
Необходимо было разработать и реализовать две программы. Первая программа должна выполнять сортировку элементов массива, замеры времени работы сортировки, проверку корректности работы реализованного алгоритма и выводить результаты работы на экран (все параметры запуска программа должна принимать через аргументы командной строки). Вторая программа будет проводить серийный запуск первой, записывая результаты работы (время выполнения сортировок) в файл. На основании данных в выходном файле необходимо построить график времени работы сортировки.
Сортировка
Программа, выполняющая замеры времени работы сортировки, должна обязательно принимать следующие значения через аргументы командной строки: количество элементов для сортировки и seed, инициализирующий генератор случайных чисел.
Требования к программе, выполняющей сортировку:
организовывать разбор командной строки (в случае не правильного ввода аргументов командной строки, сообщать пользователю правила их ввода);
для выделения/освобождения памяти под массивы необходимо использовать функции malloc/free;
для генерации массивов необходимо использовать функцию rand() (при этом сгенерированные числа должны принимать все допустимые значения из диапазона, который позволяет хранить тип данных для сортировки);
программа должна быть реализована в более чем двух файлах (в одном .c файле функция main, в другом - функции сортировки);
программа должна быть написана на языке C;
для проверки корректности необходимо сравнить результат сортировки с тем, который получается при использовании функции qsort из библиотеки std;
для замеров времени использовать функцию QueryPerformanceCounter();
программа должна выводить на экран два числа: время сортировки и элемент, расположенный в отсортированном массиве на позиции size/13, где size - количество элементов массива.
Необходимо было реализовать сортировки пузырьком и слиянием и использовать сортировку qsort из библиотеки std.
Серийный запуск
Вторая программа, проводящая серийные запуски, должна обязательно принимать следующие значения через аргументы командной строки: программа для запуска, начальное количество элементов для сортировки, конечное количество элементов для сортировки, шаг эксперимента и seed.
В результате работы программы, проводящей серийные запуски, должны создаваться два файла:
Текстовый файл, содержащий времена сортировок (в каждой строке файла должно быть два числа, разделённые точкой с запятой: количество сортируемых элементов, время сортировки).
Текстовый файл, содержащий элементы в отсортированных массивах на позиции size/13 (в каждой строке файла должно быть два числа, разделённые точкой с запятой: количество сортируемых элементов, элемент в отсортированном массиве на позиции size/13).
Для построения графиков по трём сортировкам необходимо получить три файла со временами работы сортировок. Начальное количество элементов для сортировки, конечное количество элементов для сортировки и шаг эксперимента должны быть выбраны таким образом, чтобы получить представительные данные для построения графиков (минимальное количество сортируемых элементов должно быть не больше 100, максимальное время работы сортировки должно быть не меньше 1 с, количество точек для построения графика должно быть не меньше 1500).
В отчёте должны быть приведены отдельные графики времени работы сортировок на собранных данных и должен быть построен общий график, содержащий времена работы всех сортировок (не менее 100 точек).