Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Ответы на экзаменационные билеты_2 / Классификация алгоритмов внутр. сортировки

.txt
Скачиваний:
16
Добавлен:
28.06.2014
Размер:
4.3 Кб
Скачать
Внутренняя сортировка - ориентирована на сортировку массивов. Разделение на сложные (модифицированные) и простые связано с оценкой эффективности алгоритмов по двум основным параметрам: число сравнений ключей элементов и число перестановок элементов. Для простых методов сортировки эти параметры имеют порядок в среднем n2, а для сложных (модифицированных) - n*logn, где n-количество сортируемых ключей:

1) Простые методы:

1. Метод простого обмена - проверяются пары ключей, и если они не упорядочены, то элементы взаимно меняются местами.
Простая обменная сортировка ("метод пузырька") для массива a[1], a[2], ..., a[n] работает следующим образом. Начиная с конца массива сравниваются два соседних элемента (a[n] и a[n-1]). Если выполняется условие a[n-1] > a[n], то значения элементов меняются местами. Процесс продолжается для a[n-1] и a[n-2] и т.д., пока не будет произведено сравнение a[2] и a[1]. Понятно, что после этого на месте a[1] окажется элемент массива с наименьшим значением. На втором шаге процесс повторяется, но последними сравниваются a[3] и a[2]. И так далее. На последнем шаге будут сравниваться только текущие значения a[n] и a[n-1]. Понятна аналогия с пузырьком, поскольку наименьшие элементы (самые "легкие") постепенно "всплывают" к верхней границе массива.
Шейкер-сортировка — разновидность пузырьковой сортировки. Отличается тем, что просмотры элементов выполняются один за другим в противоположных направлениях, при этом большие элементы стремятся к концу массива, а маленькие — к началу.

2. Метод простого выбора - происходит выбор элементов в порядке возрастания ключей. Сначала выбирается элемент с наименьшим ключом, затем выбирается элемент с наименьшим ключом из оставшихся и т. д. до тех пор, пока в неотсортированной последовательности не останется ни одного элемента. В результате в отсортированной последовательности элементы распологаются в том порядке, в котором они были выбраны.
В этом методах массив также делится на уже отсортированную часть A[1], ..., A[k-1] и  не отсортированную A[k],  ..., A[n].  Из не отсортированной части на каждом шаге извлекается минимальный элемент. Он будет максимальным элементом отсортированной части, так как все меньшие его элементы извлечены на предыдущих шагах, поэтому извлеченный элемент ставится в конец отсортированной части.
В начальный момент при k = 1 отсортированная часть будет пустой.

3. Метод простого включения - элементы неотсортированной последовательности рассматриваются по очереди, и каждый вставляется на соответствующее ему место в отсортированной последовательности.
При сортировке исходный массив разбивается на две части:
A[1], A[2], ..., A[k-1] - отсортированную часть
A[k], ...,A[n] - не отсортированную часть.
На k - м шаге элемент A[k] включается в отсортированную часть, на соответствующее место. При этом часть элементов, больших A[k], (если таковые есть) сдвигаются на одну позицию правее, чтобы освободить место для элемента A[k]. Прежде чем производить сдвиг элементов необходимо сохранить значение A[k] во временной переменной B.
Так как массив из одного элемента можно считать отсортированным, алгоритм начинается с k=2.

2) Сложные методы:

1. Сортировка Шелла (включение).
Метод построен на основе метода вставки с минимизацией промежуточных шагов. Сначала выполняется сортировка элементов, отстоящих друг от друга на три позиции. После этого сортируются элементы, отстоящие друг от друга на две позиции. Наконец выполняется сортировка смежных элементов.

2. Сортировка с разделением (быстрая сортировка).
"Быстрая сортировка", хоть и была разработана более 40 лет назад, является наиболее широко применяемым и одним их самых эффективных алгоритмов.
Метод основан на подходе "разделяй-и-властвуй". Общая схема такова:
1. из массива выбирается некоторый опорный элемент a[i],
2. запускается процедура разделения массива, которая перемещает все ключи, меньшие, либо равные a[i], влево от него, а все ключи, большие, либо равные a[i] - вправо,
3. теперь массив состоит из двух подмножеств, причем левое меньше, либо равно правого,
4. для обоих подмассивов: если в подмассиве более двух элементов, рекурсивно запускаем для него ту же процедуру.
В конце получится полностью отсортированная последовательность.

3. Сортировка Флойда (с помощью дерева).