![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
При обработке данных важно знать информационное поле данных и размещение их в машине.
Различают внутреннюю и внешнюю сортировку:
- внутренняя сортировка - сортировка в оперативной памяти (по внутренним ключам);
- внешняя сортировка - сортировка во внешней памяти (по внешним ключам).
Мы будем рассматривать методы сортировки по внешним ключам; на том же месте; методы устойчивой сортировки.
Сортировка - это расположение данных в памяти в регулярном виде по их ключам. Регулярность рассматривают как возрастание (убывание) значения ключа от начала к концу в массиве.
Рис. 6.1. Сортировка.
Если сортируемые записи занимают большой объем памяти, то их перемещение требует больших затрат. Для того чтобы их уменьшить, сортировку производят в таблице адресов ключей, делают перестановку указателей, т.е. сам массив не перемещается. Это метод сортировки таблицы адресов.
При сортировке могут встретиться одинаковые ключи. В этом случае при сортировке желательно расположить после сортировки одинаковые ключи в том же порядке, что и в исходном файле. Это - устойчивая сортировка (взаимное расположение одинаковых ключей не меняется).
Эффективность сортировки можно рассматривать с нескольких критериев:
- время, затрачиваемое на сортировку;
- объем оперативной памяти, требуемой для сортировки;
- время, затраченное программистом на написание программы.
Выделяем первый критерий, поскольку будем рассматривать только методы сортировки «на том же месте», то есть, не резервируя для процесса сортировки дополнительную память. Эквивалентом затраченного на сортировку времени можно считать количество сравнений при выполнении сортировки и количество перемещений.
Порядок числа сравнения при сортировке лежит в пределах от О (n log n) до О (n2); О(n) - идеальный и недостижимый случай.
Различают следующие методы сортировки:
- строгие (прямые) методы;
- улучшенные методы.
Строгие методы:
1) метод прямого включения.
Число сравнений ключей Ci при i- м просеивании самое большее равно i-1, самое меньшее - 1; если предположить, что все перестановки из N ключей равновероятны, то среднее число сравнений = i/2. Число же пересылок Mi=Ci+3 (включая барьер). Минимальные оценки встречаются в случае уже упорядоченной исходной последовательности элементов, наихудшие же оценки - когда они первоначально расположены в обратном порядке. В некотором смысле сортировка с помощью включения демонстрирует истинно естественное поведение. Ясно, что приведенный алгоритм описывает процесс устойчивой сортировки: порядок элементов с равными ключами при нем остается неизменным.
Количество сравнений в худшем случае, когда массив отсортирован противоположным образом, Cmax = n(n - 1)/2, т. е. - О (n2). Количество перестановок Mmax = Cmax + 3(n-1), т.е. - О (n2). Если же массив уже отсортирован, то число сравнений и перестановок минимально: Cmin = n-1; Мmin = 3(n-1).
2) метод прямого выбора.
Число сравнений ключей Сi, очевидно, не зависит от начального порядка ключей. Можно сказать, что в этом смысле поведение этого метода менее естественно, чем поведение прямого включения. Для С при любом расположении ключей имеем:
С=n(n-1)/2
Порядок числа сравнений (эффективности), таким образом, O(n )
Число перестановок минимально М = 3(n - 1) в случае изначально упорядоченных ключей и максимально, M
= 3(n - 1) + С, т.е. порядок O(n
), если первоначально ключи располагались в обратном порядке.
В худшем случае сортировка прямым выбором дает порядок n2, как для числа сравнений, так и для числа перемещений.
3) метод прямого обмена.
Число сравнений Сmах = n(n-1)/2, O(n ).
Число перемещений Mmax=3Cmax=3n(n-l)/2, O(n ).
Если массив уже отсортирован и применяется алгоритм с флажком, то достаточно всего одного прохода, и тогда получаем минимальное число сравнений
Cmin=n-l, O(n ), а перемещения вообще отсутствуют.
Сравнительный анализ прямых сортировок показывает, что обменная "сортировка" в классическом виде представляет собой нечто среднее между сортировками с помощью включений и с помощью выбора. Если же в нее внесены приведенные выше усовершенствования, то для достаточно упорядоченных массивов пузырьковая сортировка даже имеет преимущество.
Эффективность этих трех методов примерно одинакова.
Улучшенные методы:
1) быстрая сортировка.
О(n log n) - самый эффективный метод.
2) сортировка Шелла.
He доказано, какие расстояния дают наилучший результат, но они не должны быть множителями один другого. Д. Кнут предлагает такую последовательность шагов (в обратном порядке): 1, 3, 7, 15, 31,... То есть: h = h
+ 1, t = log
n - 1. При такой организации алгоритма его эффективность имеет порядок О (n
).
Дата публикования: 2015-02-03; Прочитано: 1093 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!