Читайте также:
|
|
Название метода | C(n) | M(n) | T(n) | |||
в лучшем случае | в худшем случае | в лучшем случае | в худшем случае | в лучшем случае | в худшем случае | |
Прямой Выбор | n2-n | n2-n | 3(n-1) | 3(n-1)+n2/4 | 5 n2 + 23 n -11 2 2 | 13 n2 + 23 n -11 2 2 |
Прямой Обмен | n2-n | n2-n | 3(n2-n) | 7 n2 + 5 n -3 2 2 | 8n2-2n-3 | |
Прямое Включение | n-1 | n2-n | 2(n-1) | n2+3n-4 | 18n — 16 | 5n2+8n-11 |
Выводы:
1. Все прямые методы сортировки порядка О(n2), т.к. Т(n)» C n2 в худшем случае.
2. В худшем случае Обменная сортировка проигрывает сортировке Выбором и сортировке Включением. Из этих двух последних сортировка Выбором лучше, т.к. в ней меньше перестановок, отсюда рекомендация: при сортировке сложных (громоздких) данных использовать сортировку Выбором.
3. Сортировка выбором никак не реагирует на упорядоченность элементов. Поэтому рекомендуется: в случае почти упорядоченной совокупности использовать сортировку Включением.
4. При небольших n затраты временные во всех трёх методах практически одинаковые. Из-за простоты метода лучше всего запоминается и часто используется именно метод Обменной сортировки.
Cортировка сложных данных
В случае сортировки данных сложного типа (матриц, векторов, записей и т.п.) рекомендуется использовать Прямой выбор, т.к. он требует меньше перестановок.
Для данных сложных типов не определены операции отношения, поэтому (если они определены в самой задаче) проверки типа if a [j] > a [j+1] { ….} оформляются в процедурах или функциях. Например, функция P(a,b) возвращает true, если a > b. Тогда указанный фрагмент запишется if (P(a [j], a [j+1])) { …}
В случае сортировки по значениям упорядочивающей функции f(x) рекомендуется сформировать вектор значений упорядочивающей функции U = {f(a 1), f(a 2), …,f(a n)}. Сравнения элементов в описанных алгоритмах заменяются сравнением значений упорядочивающей функции, но переставлять в этом случае необходимо и сами элементы и значения упорядочивающей функции. Например, фрагмент пузырьковой сортировки запишется так
if (u [j] > u [j+1]) { u [j] Û u [j+1]; а [j] Û a [j+1]};
При сортировке сложных данных часто, чтобы не переставлять элементы в совокупности и значения упорядочивающей функции, применяют алгоритмы сортировки с использованием вектора индексов. Для этого заводят специальный вектор, назовём его Ind: помещают в Ind индексы элементов 1, 2, 3, …,n. В алгоритмах сортировки вместо перестановки элементов и значений упорядочивающей функции переставляют их индексы. Однако, необходимо помнить в этом случае, что доступ к элементам совокупности и значениям упорядочивающей функции выполняется через вектор индексов:
a [ Ind[j] ] вместо a [j], u [ Ind [j] ] вместо u [ j ]
if (a[ Ind[j] ] >a[ Ind[j+1] ]) { Ind[j] ÛInd[j+1] }
if (u [ Ind [j] ]> u [ Ind [j+1] ]) { Ind[j] ÛInd[j+1] }
Дата добавления: 2014-12-20; просмотров: 93 | Поможем написать вашу работу | Нарушение авторских прав |