Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы к курсу программирования.doc
Скачиваний:
4
Добавлен:
09.09.2019
Размер:
878.08 Кб
Скачать

30.Сортировки массивов. Прямые методы сортировки.

Сортировкой или упорядочением массива называется расположение его элементов по возрастанию (или убыванию). Если не все элементы различны, то надо говорить о неубывающем (илиневозрастающем) порядке.

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

количество шагов алгоритма, необходимых для упорядочения;

количество сравнений элементов;

количество перестановок, выполняемых при сортировке.

Мы рассмотрим только три простейшие схемы сортировки.

В прямых методах сортировки перестановки элементов должны быть выполнены в одном массиве (минимальная по памяти сортировка). Выделяют следующие прямые методы сортировки: - сортировка обменами ("пузырьковая сортировка"); - сортировка выбором; - сортировка простыми вставками.

31.Сортировка вставкой.

Массив делится на две части - отсортированную и неотсортированную. В начале работы в отсортированную часть входит только один первый элемент. Алгоритм выполняет n-1 проход, на каждом из которых поочередно выбираются элементы из неотсортированной части и вставляются в отсортированную часть таким образом, чтобы не нарушить в ней упорядоченность элементов. На некотором i-м проходе элементы a1, a2, ..., ai составляют отсортированную часть, а элементы ai+1, ai+2, …, an - неотсортированную. Если f(ai) ≤ f(ai+1), то элемент ai+1 включается в отсортированную часть. В противном случае значение ai+1 временно сохраняется в переменной s = ai+1, а элемент ai сдвигается на одну позицию вправо. Далее ключ f(s) поочередно сравнивается с ключами следующих элементов из отсортированной части справа налево, т.е. с ключами f(ak), k = i-1, i-2, ..., 1. Если f(S) < f(ak), то элемент ak сдвигается на одну позицию, вправо. В противном случае элемент S записывается в k+1-ю позицию. Скорость сортировки простыми вставками можно увеличить, если для поиска позиции элемента ai+1 в отсортированной части использовать метод бинарного поиска, так как элементы упорядочены. Это уменьшает общее число сравнений от O(n2) до O(n log2n), но количество перестановок элементов при этом не уменьшается и имеет порядок O(n2).

32.Сортировка массивов. Прямые методы сортировки.

33.Сортировка обменом.

Слева направо поочередно сравниваются ключи двух соседних элементов. Если их порядок не соответствует заданному отношению, то эти элементы меняются местами. Далее осуществляется сдвиг вправо па один элемент и анализируется следующая пара. Просмотр массива завершается после сравнения ключей элементов, находящихся в предпоследней (n-1)-й и последней n-й позициях. После первого просмотра массива элемент с наибольшим значением ключа займет позицию n, а с наименьшим - переместится на одну позицию к началу массива. Второй просмотр выполняется аналогично, но завершается сравнением элементов в позициях n-2 и n-1, поскольку максимальный элемент уже занял свою позицию. Таким образом, на каждом просмотре очередные наибольшие элементы будут занимать позиции n, n-1, n-2, ..., 2, а всего потребуется n-1просмотров. Ускорение работы алгоритма может быть достигнуто следующим образом. На каждом просмотре фиксируется факт наличия или отсутствияобменов. Если на очередном просмотре обменов не было, то элементы упорядочены и сортировка завершена.