Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_na_voprosy_k_ekzamenu_po_AiSD.docx
Скачиваний:
42
Добавлен:
29.04.2019
Размер:
417.06 Кб
Скачать

35. Сортировка методом прямого обмена (пузырьковая).

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

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

Такой метод широко известен под именем "пузырьковая сортировка".

Алгоритм:

for i = 2 to n

for j = n to i step -1

if a(j) < a(j - 1) then

x = a(j - 1)

a(j - 1) = a(j)

a(j) = x

endif

next j

next i

return

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

fl = true

for i = 2 to n

if fl = false then return

endif

fl = false

for j = n to i step -1

if a(j) < a(j - 1) then

fl = true

x = a(j - 1)

a(j - 1) = a(j)

a(j) = x

endif

next j

next i

return

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

Эффективность алгоритма сортировки прямым обменом

  • Число сравнений Cmax = n(n-1)/2, порядок О(n2).

  • Число перемещений Мmax= 3Cmax= 3n(n-1)/2, порядок О(n2).

  • Если массив уже отсортирован и применяется алгоритм с флажком, то достаточно всего одного прохода по массиву, и тогда получаем минимальное число сравнений

Cmin = n - 1, порядок О(n), а перемещения вообще отсутствуют

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

36. Быстрая сортировка

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

Слева от 6 располагают все ключи с меньшими, а справа - с большими или равными 6.

Sub Sort (L, R)

i = L

j = R

x = a((L + R) div 2)

repeat

while a(i) < x do

i = i + 1

endwhile

while a(j) > x do

j = j - 1

endwhile

if i <= j then

y = a(i)

a(i) = a(j)

a(j) = y

i = i + 1

j = j - 1

endif

until i > j

if L < j then

sort (L, j)

endif

if i < R then

sort (i, R)

endif

return

Sub QuickSort

Sort (1, n)

return

Эффективность алгоритма Quick Sort

Из всех существующих методов сортировки Quick Sort самый эффективный.

Его эффективность имеет порядок О (n log2 n)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]