Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Labs-Programming.doc
Скачиваний:
23
Добавлен:
06.09.2019
Размер:
574.98 Кб
Скачать

Лабораторная работа №1. Реализация алгоритмов сортировки и поиска Задачи работы

Задачами данной лабораторной работы являются:

  1. Закрепление навыков программирования на языке C++, в частности, навыков работы с массивами, указателями и функциями.

  2. Контроль освоения студентами теоретического материала – информации об алгоритмах сортировки и поиска.

Задание на лабораторную работу

Разработать программу на языке C++, реализующую алгоритм сортировки или поиска в соответствии с индивидуальным вариантом задания.

Варианты задания:

  1. Реализовать сортировку Шелла (описана ниже).

  2. Реализовать сортировку шейкером (описана ниже).

  3. Реализовать сортировку подсчетом для массива данных типа char [5, стр. 224].

  4. Реализовать цифровую сортировку для типа int (32-разрядных целых чисел). Сортировать по двоичной записи числа [5, стр. 226].

  5. Реализовать цифровую сортировку для типа int (32-разрядных целых чисел). Сортировать по десятичной записи числа [5, стр. 226].

  6. Реализовать цифровую сортировку для типа int (32-разрядных целых чисел). Сортировать по восьмеричной записи числа [5, стр. 226].

  7. Реализовать цифровую сортировку для типа int (32-разрядных целых чисел). Сортировать по шестнадцатеричной записи числа [5, стр. 226].

  8. Реализовать пирамидальную сортировку (HeapSort) [5, стр. 178].

  9. Реализовать сортировку расческой (CombSort).

  10. Реализовать плавную сортировку (Smooth Sort).

  11. Реализовать быструю сортировку (QuickSort) [5, стр. 198].

  12. Реализовать рандомизированную быструю сортировку (QuickSort) [5, стр. 208].

  13. Реализовать блочную (карманную, bucket) сортировку [5, стр. 230].

  14. Реализовать метод Patience sorting.

  15. Реализовать метод IntroSort.

  16. Реализовать бинарный поиск в массиве [1, разд. 2.1].

  17. Реализовать поиск i-ой порядковой статистики ([5, стр. 243])

  18. Реализовать строгий поиск i-ой порядковой статистики ([5, стр. 247]).

  19. Решить методом динамического программирования задачу поиска оптимального пути на конвейере [5, разд. 15.1]

  20. Решить методом динамического программирования задачу поиска самой длинной подпоследовательности [5, разд. 15.4]

  21. Решить методом динамического программирования задачу поиска лучшего варианта перемножения матриц [5, разд. 15.2]

  22. Реализовать гномью сортировку.

  23. Реализовать вариант алгоритма Merge Sort без использования дополнительной памяти http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.22.8523

  24. Реализовать метод сортировки SpreadSort (http://en.wikipedia.org/wiki/Spreadsort)

  25. Реализовать метод сортировки Gapped insertion sort (Library Sort) http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.60.3758

Программа должна позволять ввести исходные данные из файла. Программа должна выводить результат в файл.

Достаточна разработка консольного приложения. Разработка Windows-приложения будет большим преимуществом выполнения работы, если студент достаточно подготовлен для создания Windows-приложений, иллюстрирующих работу системы.

Требования к отчетности по лабораторной работе

В качестве отчета по лабораторной работе студент предоставляет в электронном виде программу на языке C++, реализующую функциональность в соответствии с вариантом задания.

Предлагаемые этапы выполнения работы

  1. Изучение теоретического материала.

  2. Создание пустого консольного приложения в среде Visual Studio 2005 [3].

  3. Разработка функций ввода-вывода данных

  4. Отладка функций ввода-вывода данных.

  5. Разработка функции сортировки или поиска в соответствии с заданием.

  6. Отладка программы.

Теоретический материал, необходимый для выполнения лабораторной работы

Алгоритмы сортировки

В этом разделе описана часть алгоритмов сортировки. Алгоритмы, подробно описанные в [5], не дублируются.

Сортировка вставками

Сортировку вставками необходимо рассмотреть, чтобы перейти затем к сортировке Шелла.

Алгоритм сортировки вставками сводится к следующему. Если первые N элементов (A[0]…A[N-1]) отсортированы, мы можем вставить N-ый элемент в отсортированную последовательность с помощью кода:

t = A[ N ];

for ( i = N - 1; i >= 0 && A[i] > t ; i-- )

A[ i + 1 ] = A[ i ];

A[ i + 1 ] = t;

После этого будут отсортированы уже N+1 элементов.

Использование бинарного поиска места для нового элемента было бы бессмысленно, т.к. время сдвига оставшихся элементов на одну позицию направо все равно линейно.

Последовательность из одного элемента отсортирована всегда. Значит, мы можем сортировать массив путем последовательных вставок.

Этот алгоритм работает за время O(N2). К его преимуществам относится хорошая работа в случае почти отсортированных массивов (мы мгновенно обнаруживаем, что нам не надо двигать тот или иной элемент) и сохранение порядка элементов при сортировке.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]