Опубликован: 02.02.2011 | Доступ: свободный | Студентов: 3341 / 952 | Оценка: 4.43 / 3.57 | Длительность: 33:06:00
Специальности: Программист
Лекция 43:

Алгоритмы сортировки массивов. Внутренняя сортировка

< Лекция 42 || Лекция 43: 1234 || Лекция 44 >

Лабораторная работа 42. Алгоритмы сортировки массивов. Внутренняя сортировка

Цель работы: изучить основные алгоритмы внутренних сортировок и научиться решать задачи сортировок массивов различными методами (бинарная пирамидальная сортировка, метод Шелла, быстрая сортировка Хоара, сортировка слиянием).

При выполнении лабораторной работы для каждого задания требуется написать программу на языке С++, которая получает на входе числовые данные, выполняет генерацию и вывод массива указанного типа в зависимости от постановки задачи. В каждой задаче необходимо выполнить сортировку данных и реализовать один из алгоритмов: бинарной пирамидальной сортировки, сортировки по методу Шелла, быстрой сортировки Хоара и сортировки слиянием в виде отдельных функций. Ввод данных осуществляется с клавиатуры или из файла с учетом требований к входным данным, содержащихся в постановке задачи. Ограничениями на входные данные является диапазон используемого числового типа данных в языке С++ и максимально допустимый размер объявляемого одномерного массива.

Теоретические сведения.

Ознакомьтесь с материалом лекции 42.

Задания к лабораторной работе.

Выполните приведенные ниже задания.

  1. На основании приведенных в лекции 42 функций реализуйте алгоритмы внутренних сортировок.
  2. Даны два целочисленных файла, упорядоченных по возрастанию. Сформировать третий файл на основе данных, который также упорядочен и представляет операцию с элементами исходных файлов:
    • объединение (содержит числа, принадлежащие хотя бы одному из множеств);
    • перечисление (числа, принадлежащие обоим множествам);
    • разность (числа, принадлежащие первому множеству, но не второму);
    • симметричную разность (объединение разностей множеств).
  3. Заданы N (N<=5000) попарно различных длин отрезков. Вычислить количество способов, которыми из отрезков можно сложить треугольник.
  4. Дана целочисленная квадратная матрица размером n. Упорядочить значения так, чтобы a11<=a12<=<=a1n<=a21<=a22<=<=a2n<=<=an1<=an2<=<=ann.
  5. Дан целочисленный массив. Выполните проверку уникальности. Удалите из массива повторные вхождения чисел.

Указания к выполнению работы.

Каждое задание необходимо решить в соответствии с изученными алгоритмами внутренних сортировок: бинарной пирамидальной сортировки, сортировки по методу Шелла, быстрой сортировки Хоара и сортировки слиянием. Программные коды следует реализовать на языке С++. Рекомендуется воспользоваться материалами лекции 42, где подробно рассматриваются описание используемых в работе алгоритмов, примеры их реализации на языке С++. Программу для решения каждого задания необходимо разработать методом процедурной абстракции, используя функции. Этапы решения сопроводить комментариями в коде. В отчете следует отразить разработку и обоснование математической модели решения задачи и примеры входных и выходных файлов.

Следует реализовать каждое задание в соответствии с приведенными этапами:

  • изучить словесную постановку задачи, выделив при этом все виды данных;
  • сформулировать математическую постановку задачи;
  • выбрать метод решения задачи, если это необходимо;
  • разработать графическую схему алгоритма;
  • записать разработанный алгоритм на языке С++;
  • разработать контрольный тест к программе;
  • отладить программу;
  • представить отчет по работе.

Требования к отчету.

Отчет по лабораторной работе должен соответствовать следующей структуре.

  • Титульный лист.
  • Словесная постановка задачи. В этом подразделе проводится полное описание задачи. Описывается суть задачи, анализ входящих в нее физических величин, область их допустимых значений, единицы их измерения, возможные ограничения, анализ условий при которых задача имеет решение (не имеет решения), анализ ожидаемых результатов.
  • Математическая модель. В этом подразделе вводятся математические описания физических величин и математическое описание их взаимодействий. Цель подраздела – представить решаемую задачу в математической формулировке.
  • Алгоритм решения задачи. В подразделе описывается разработка структуры алгоритма, обосновывается абстракция данных, задача разбивается на подзадачи. Схема алгоритма выполняется по ЕСПД (ГОСТ 19.003-80 и ГОСТ 19.002-80).
  • Листинг программы. Подраздел должен содержать текст программы на языке программирования С++, реализованный в среде MS Visual Studio 2010.
  • Контрольный тест. Подраздел содержит наборы исходных данных и полученные в ходе выполнения программы результаты.
  • Выводы по лабораторной работе.
  • Ответы на контрольные вопросы.

Контрольные вопросы

  1. Чем можно объяснить многообразие алгоритмов сортировок?
  2. Почему на данный момент не существует универсального алгоритма сортировки?
  3. Как соблюдение свойств устойчивости и естественности влияет на трудоемкость алгоритма сортировки?
  4. За счет чего в алгоритмах быстрых сортировок происходит выигрыш при выполнении операций сравнения и перестановок?
  5. Какие из перечисленных алгоритмов наиболее эффективны на почти отсортированных массивах: бинарная пирамидальная сортировка, сортировка слиянием, сортировка Шелла и сортировка Хоара? За счет чего происходит выигрыш?
  6. Почему алгоритмы быстрых сортировок не дают большого выигрыша при малых размерах массивов?
  7. В чем преимущества и недостатки по отношению друг к другу следующих алгоритмов сортировок: бинарная пирамидальная сортировка, сортировка слиянием, сортировка Шелла и сортировка Хоара?
  8. Как определить, какому алгоритму сортировки отдать предпочтение при решении задачи?
< Лекция 42 || Лекция 43: 1234 || Лекция 44 >
Денис Курбатов
Денис Курбатов
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!