Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1.9, вопросы 3-7.doc
Скачиваний:
4
Добавлен:
20.04.2019
Размер:
4.26 Mб
Скачать
  1. Технология программирования сортировки информации

Постановка задачи сортировки:

Пусть задан некоторый набор данных, состоящий из n записей x1, x2, xn. Каждая запись xi содержит поле ключа Ki , требуется расставить записи в наборе данных в порядке Xl1, Xl2, Xln, чтобы для заданной функции сортировки F было задано

F( Xl1) < F(Xl2) < F(Xln)

k( Xl1) < k(Xl2) < k(Xln)

Сортировка – процесс целенаправленной перестановки записей, при которой их взаимное расположение приводится в порядок известным ключом

F задает отношение порядка (алфавитное, возрастающее или убывающее значение ключей)

В ИС набор данных хранится в упорядоченном виде для того чтобы автоматизировать извлечение и вывод информации или сделать машинный доступ более эффективным

В ИС более 25% машинного времени тратится на сортировку

Сортировка называется устойчивой если она удовлетворяет условию, что записи с одинаковым ключом остаются в порядке:

F( Xli) < F(Xlj) tckb k (Xli)=k(Xlj)

Классификация алгоритмов сортировки

В наст время алгоритмы отличаются сложностью, быстродействием и занимают память

Все методы делятся на

  1. Внутренние

  2. Внешние

Внутренние применяются к наборам данных, которые полностью помещаются в памяти компьютера

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

  1. Сравнительные и распределительные методы

В сравнительных элементы сортируются по относительной величине ключей записи

В распределительных каждый ключ обследуется символ за символом

  1. Простой метод – один и тот же метод в процессе сортировки

  2. Комбинированные – одновременно используются 2 и более метода

В зависимости от используемого метода, упорядоченная последовательность записей размещается на том же участке памяти, что и исходная, или требует дополнительного участка памяти.

Исходная последовательность может быть задана вся сразу, либо использовать по одному

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

  1. Обмен

  2. Выбор

  3. Вставка

  4. Слияние

  5. Поразрядная

Процесс сортировки записей состоит из просмотров и сравнения ключей, расположении элементов в соответствии с результатом сравнения.

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

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

2 выбранных элемента, расположение которых не соответствует порядку, меняют местами. Этот процесс идет до тех пор, пока есть такие пары.

К обмену относятся: парный обмен, стандартный обмен, Шейкер-сортировка, метод Бэтчера, быстрая сортировка, челночная.

Все методы различаются способом просмотра и выбора сортируемой последовательности и элементов для сравнения

  1. На массивах

  2. С числовыми ключами

  3. По возрастанию

Метод стандартного обмена – основан на попарном сравнении ключей соседних записей в одном направлении. Если порядок правильный в паре, то они остаются на местах, иначе – меняются местами. Для ускоренного алгоритма можно фиксировать факт обмена. Просмотр, в котором не было ни одного обмена заканчивает сортировку

Метод Шелла – сначала сравнивается отдаленные, а потом близко расположенные элементы. Переменная J содержит интервал, разделяющий сравниваемые элементы. В начала J=N/2, в процессе сортировки J уменьшается на каждом шаге в 2 раза, пока не начнет выполняться сравнение соседних элементов

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

Характеристики:

- легкое программирование,

- требуется наличие всех записей до начала сортировки

- время на сорт зависит от упорядоченного набора данных

- число сравнений постоянно = N(N-1)/2

- число обменов: min=0, max= N(N-1)/2

Шейкер сортировка

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

На 1-м просмотре производится сравнение ключей соседних записей, например слева направо, начиная с первой позиции, и фиксируется позиция L последнего обмена. На 2-м просмотре сравниваются ключи соседних записей справа налево, начиная с L-го элемента, и фиксируется позиция R последнего обмена. В результате 2-х просмотров запись с наибольшим ключом займет N-ю позицию, а запись с наименьшим ключом - 1-ю. Затем снова слева направо сравниваются ключи соседних записей, начиная с R-й позиции и кончая L-й и т.д. Сортировка заканчивается, если в результате очередного просмотра не производился обмен.

Пример.

5, 4, 1, 2, 3

R=1, L=5, FLAG=0;

I=1; 4 5 1 2 3

I=2; 4 1 5 2 3

I=3; 4 1 2 5 3

I=4; 4 1 2 3 5;

M=4, FLAG=1;

L=4, FLAG=0;

I=4; 4 1 2 3 5

I=3; 4 1 2 3 5

I=2; 1 4 2 3 5;

M=2, FLAG=1;

R=2, FLAG=0;

I=2; 1 2 4 3 5

I=3; 1 2 3 4 5

M=3, FLAG=1;

L=3, FLAG=0;

I=3; 1 2 3 4 5;

R=3.

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

Идея метода состоит в том, чтобы идти по шагам j=1,2…N-1, находя на j-м шаге среди неотсортированных записей запись с наименьшим ключом м помещать ее на соответствующее место.

К сортировке выбором относятся: простой линейный выбор, линейный выбор с обменом, турнирная сортировка, пирамидальная. Они различаются способом выбора, очередностью , сравнением и обменом

Простой линейный выбор

Линейный выбор с обменом – просматриваются все исходные записи, находится запись с наименьшим ключом и она помещается на 1ю позицию, затем во всех элементах, начиная со 2ого, находятся запись с наименьшим ключом, она помещается на 2ю позицию и тд

Характеристики:

-прост для программирования

-требуется наличие всех записей до начала сортировки

-число записей сокращается от просмотра к просмотру, число сран

-нет ускорения, если записи упорядочены

-число сравнений N*(N-1)/2

-число перестановок N-1

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

записи просматриваются по одной и каждую новую запись вставляется на надлежащее место среди ранее упорядоченных записей.

Методы: простая вставка, бинарная вставка, метод Шелла, различаются способом поиска подходящего места для вставки элемента, все записи условно разделяются на 2 части: упорядоченные и неупорядоченные.

Простая вставка – алгоритм происходит в цикле от 2 до N. На начальном этапе упорядоченная последовательность состоит из X1. На j-м этапе запись Xj вставляется на свое правильное место среди записей X1, X2, Xj-1. При вставке Xj временно размещается в запись S и просматриваются записи Xj-1, Xj-2, X1. Их ключи сравниваются с ключом T записи S и записи сдвигаются вправо, если обнаруживается, что их ключи >T

Метод наиболее эффективен для частично отсортированных записей. Max число сравнений =N-1, Min= N(N-1)/2

Метод Шелла – идея аналогична методу, что и при обмене

Сортировка слиянием

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

Данный метод можно использовать для сортировки и одного набора данных. Для этого НД разделяется на N частей в один элемент и объединен соседние Не объединенные пары элементов (???). В результате образуется N/2 частей размером в 2 элемента и тд. Это продолжается пока не останется только одна последовательность размером N

Индексная сортировка – объем данных, помещенный в каждую из записей файла может быть столь большим, что при сортировке перемещение самих записей является нецелесообразным из-за больших накладных расходов

Алфавитная сортировка

Сортировка символьной информации отличается от сортировки числовых данных тем, что надо учитывать при сравнении символов их лексикографич. упор-ть в таблице кодов ASCII

  1. Символы используемого алфавита имеют упорядоченные коды в ASCI

  2. Символы использ алфавита не имеют когда ASCI

В первом случае сравнение символьной информации производится обычными операциями сравнения.

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