Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МАТЕРИАЛ НА ЭКЗАМЕН.doc
Скачиваний:
0
Добавлен:
12.01.2020
Размер:
629.76 Кб
Скачать

5.Методы внутренней сортировки.

При решении задачи сортировки обычно выдвигается требование минимального использования дополнительной памяти, из которого выте­кает недопустимость применения дополнительных массивов.

Для оценки быстродействия алгоритмов различных методов сорти­ровки, как правило, используют два показателя:

• количество присваиваний;

• количество сравнений.

Все методы сортировки можно разделить на две большие группы:

• прямые методы сортировки;

• улучшенные методы сортировки.

Прямые методы сортировки по принципу, лежащему в основе ме­тода, в свою очередь разделяются на три подгруппы:

1) сортировка вставкой (включением);

2) сортировка выбором (выделением);

3) сортировка обменом ("пузырьковая" сортировка).

Улучшенные методы сортировки основываются на тех же принци­пах, что и прямые, но используют некоторые оригинальные идеи для ус­корения процесса сортировки. Прямые методы на практике используют­ся довольно редко, так как имеют относительно низкое быстродействие. Однако они хорошо показывают суть основанных на них улучшенных методов. Кроме того, в некоторых случаях (как правило, при небольшой длине массива и/или особом исходном расположении элементов массива) некоторые из прямых методов могут даже превзойти улучшенные методы.

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

Принцип метода:

Массив разделяется на две части: отсортированную и неотсортиро­ванную. Элементы из неотсортированной части поочередно выбираются и вставляются в отсортированную часть так, чтобы не нарушить в ней упорядоченность элементов. В начале работы алгоритма в качестве отсор­тированной части массива принимают только один первый элемент, а в качестве неотсортированной части — все остальные элементы.

Таким образом, алгоритм будет состоять изп-1-го прохода ( n — раз­мерность массива), каждый из которых будет включать четыре действия:

• взятие очередного i-го неотсортированного элемента и сохранение его в дополнительной переменной;

• поиск позиции j в отсортированной части массива, в которой присут­ствие взятого элемента не нарушит упорядоченности элементов;

• сдвиг элементов массива от i-1-го до j-1-го вправо, чтобы освободить найденную позицию вставки;

• вставка взятого элемента в найденную j-ю позицию.

Для реализации данного метода можно предложить несколько ал­горитмов, которые будут отличаться способом поиска позиции вставки. Рассмотрим схему реализации одного из возможных алгоритмов. Слева в кружке указан номер прохода.

Сортировка выбором

6.Внешняя сортировка наборов данных.

Внешняя сортировка в корне отличается от внутренней (хотя в обоих случаях необходимо расположить записи данного файла в неубывающем порядке), и объясняется это тем, что время доступа к файлам на внешних носителях нас жесточайшим образом лимитирует. Структура данных должна быть такой, чтобы сравнительно медленные периферийные устройства могли справиться с потребностями алгоритма сортировки. Поэтому большинство изученных до сих пор методов внутренней сортировки (вставка, обмен, выбор) фактически бесполезно для внешней сортировки. Пусть, например, файл состоит из 5000 записей R1…R5000 длиной по 20 слов. Как быть, если во внутр. Памяти данной машины помещается одновременно только 1000 из этих записей? Решение: начать с сортировки каждого из 5 подфайлов R1..R1000,..R4001..R5000 по отдельности и затем слить полученные подфайлы. Слияние оперирует только очень простыми структурами данных, именно линейными списками, пройти которые можно последовательным образом, как стеки или очереди. Поэтому для слияния годятся самые дешевые внешние запоминающие устройства.

Многоуровневое слияние и выбор с замещением. Пусть имеется Р отрезков возрастающих, т.е. последовательность записей, ключи которых расположены в неубывающем порядке. Очевидным способом их слияния будет следующий: посмотреть на первые записи любого отрезка и выбрать из них ту, которой соответствует минимальный ключ; эта запись передается на выход и исключается из исходных данных, затем процесс повторяется. Пока Р не слишком велико, этот выбор удобно осуществлять, просто выполняя (Р-1) сравнений для нахождения наименьшего из текущих ключей. Но если скажем, Р>=8, то можно сократить работу, используя дерево выбора; тогда каждый раз требуется только прибл. (LogPпо2) сравнений (после начального формирования дерева). В описанном процессе каждый шаг, кроме первого, состоит из замещения наименьшего элемента следующим элементом из этого же отрезка и изменения соответствующего пути в дереве выбора. Процесс замещения в дереве выбора одного ключа другим называется выбором с замещением. Техника выбора с замещением может использоваться также на первой фазе внешней сортировки, если фактически выполнить Р-путевое слияние входных данных с самими собою. В этом случае Р выбирается достаточно большим, чтобы заполнить, по существу всю внутреннюю память. Каждая запись при выводе замещается очередной записью из исходных данных. Если из этой новой записи ключ меньше, чем у выведенной записи, то мы не включаем ее в текущий отрезок, в противном случае мы обычным образом включаем ее в дерево выбора, так что она образует часть отрезка.