Технология программирования сортировки информации
Постановка задачи сортировки:
Пусть задан некоторый набор данных, состоящий из 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)
Классификация алгоритмов сортировки
В наст время алгоритмы отличаются сложностью, быстродействием и занимают память
Все методы делятся на
Внутренние
Внешние
Внутренние применяются к наборам данных, которые полностью помещаются в памяти компьютера
Внешние применяются к последовательностям записей, которые в процессе сортировки располагаются на устройствах внешней памяти
Сравнительные и распределительные методы
В сравнительных элементы сортируются по относительной величине ключей записи
В распределительных каждый ключ обследуется символ за символом
Простой метод – один и тот же метод в процессе сортировки
Комбинированные – одновременно используются 2 и более метода
В зависимости от используемого метода, упорядоченная последовательность записей размещается на том же участке памяти, что и исходная, или требует дополнительного участка памяти.
Исходная последовательность может быть задана вся сразу, либо использовать по одному
Алгоритмы сортировки:
Обмен
Выбор
Вставка
Слияние
Поразрядная
Процесс сортировки записей состоит из просмотров и сравнения ключей, расположении элементов в соответствии с результатом сравнения.
Критерии оценки эффективности методов: количество сравниваемых пар ключей записей, число перестановок и требуемый дополнительный объем памяти.
Сортировка обменом
2 выбранных элемента, расположение которых не соответствует порядку, меняют местами. Этот процесс идет до тех пор, пока есть такие пары.
К обмену относятся: парный обмен, стандартный обмен, Шейкер-сортировка, метод Бэтчера, быстрая сортировка, челночная.
Все методы различаются способом просмотра и выбора сортируемой последовательности и элементов для сравнения
На массивах
С числовыми ключами
По возрастанию
Метод стандартного обмена – основан на попарном сравнении ключей соседних записей в одном направлении. Если порядок правильный в паре, то они остаются на местах, иначе – меняются местами. Для ускоренного алгоритма можно фиксировать факт обмена. Просмотр, в котором не было ни одного обмена заканчивает сортировку
Метод Шелла – сначала сравнивается отдаленные, а потом близко расположенные элементы. Переменная 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
Символы используемого алфавита имеют упорядоченные коды в ASCI
Символы использ алфавита не имеют когда ASCI
В первом случае сравнение символьной информации производится обычными операциями сравнения.
Во втором для символом произвольного алфавита можно применить перечисляемый тип и использовать тот факт, что в этом типа элементы упорядочены в порядок перечисления , необходимо использовать поразрядную сортировку.