1. Постановка задачи
Написать программу на C++ для сравнения различных алгоритмов сортировки: Сортировки пузырьком, сортировки слиянием, поразрядная сортировка слиянием. Выполнить реализацию. Написать для нее тесты.
2. Функциональные требования
2.1. Программа должна сортировать последовательность, следующими методами сортировки: метод пузырька, сортировка слиянием, поразрядная сортировка слиянием
2.2. Программа должна позволять выбрать любой из реализованных алгоритмов сортировки и запустить его на исходных данных
2.3. Должна быть возможность как автоматической, так и ручной проверки корректности работы алгоритмов (в т. ч. должна быть возможность просмотра как исходных данных, так и результата)
2.4. Программа должна предоставлять функцию измерения времени выполнения алгоритма
2.5. Должна быть функция сравнения алгоритмов – по времени выполнения на одних и тех же входных данных.
2.6. По результатам функции измерения времени выполнения должна предоставляться функция построения графика зависимости времени сортировки от размера последовательности
2.7. Должна быть возможность вывода исходной и(или) отсортированной последовательности в файл и(или) на экран
2.8. Должна быть возможность ввода исходной последовательности из файлас клавиатуры
2.9. Реализовать бинарный поиск по исходному массиву(для него массив сортируется любым из доступных методов)
2.10. Оставить в реализации интерфейса место для добавления алгоритмов поиска
3. Требования к структурам данных и алгоритмам
3.1. Последовательность должна быть реализована как массив и список, наследующие у абстрактного Sequence
4. Требования к интерфейсу
4.1. Программа должна обладать пользовательским интерфейсом (графическим, реализация в MFC или консольным). В случае консольной реализации интерфейс должен быть не совсем примитивным
4.2. Интерфейс должен предоставлять пользователю возможность выбора, какой алгоритм из реализованных выполнить (или выполнить тесты)
4.3. Интерфейс должен предоставлять возможность добавлять и удалять элементы из последовательности во время исполнения программы (как из файла, так и с клавиатуры)
5. Требования к форматам входных и выходных данных
5.1. Требования к форматам входных данных
5.1.1. При вводе с клавиатуры:
5.1.1.1. Пользователь обязан сообщить(выбрать в интерфейсе), данные какого типа вводит, затем вводить желаемое кол-во указанного типа.
5.1.1.2. При добавлении после первого считывания должны вводиться данные того же типа, что и были указаны пользователем при начальном вводе.
5.1.2. При вводе из файла:
5.1.2.1. должно быть специфицировано, данные какого типа будут считываться.
5.1.2.2. При добавлении после первого считывания должны вводиться данные того же типа, что и были указаны пользователем при начальном вводе.
5.2. Требования к форматам выходных данных
5.2.1. При выводе на экран:
5.2.1.1. Программа должна иметь возможность выводить на экран как исходную последовательность, так и отсортированную (вывод должен быть форматированным)
5.2.1.2. Программа должна иметь возможность вывод на экран график зависимости, указанный в функциональных требованиях
5.2.2. При выводе в файл:
5.2.2.1. Программа должна иметь возможность выводить в файл как исходную последовательность, так и отсортированную (вывод должен быть форматированным)
6. Требования к unit-тестам
6.2. unit-тесты должны проверять работоспособность программы в следующих сценариях:
6.2.1. массив уже отсортирован в нужном направлении
6.2.2. массив отсортирован в обратном направлении
6.2.3. массив не отсортирован
6.3. Unit-тесты должны проверять корректность вывода данных
6.4. Написать, по крайне мере, один тест, покрывающий хотя бы 75% строк кода
6.5. Должна быть возможность запуска тестов отдельно по их строковому идентификатору
6.6. Каждый тест снабдить описанием.