Сортировка пузырьком — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Пример работы алгоритма)
Строка 55: Строка 55:
 
'''Второй проход:'''
 
'''Второй проход:'''
  
('''1 4''' 2 5 8) ('''1 4''' 2 5 8)
+
{| style="background-color:#CCC;margin:0.5px"
 
+
!style="background-color:#EEE"| До
(1 '''4 2''' 5 8) (1 '''2 4''' 5 8), Меняет местами, так как 4 > 2
+
!style="background-color:#EEE"| После
 
+
!style="background-color:#EEE"| Описание шага
(1 2 '''4 5''' 8) (1 2 '''4 5''' 8)
+
|-
 
+
|style="background-color:#FFF;padding:2px 10px"| '''1 4''' 2 5 8
(1 2 4 '''5 8''') (1 2 4 '''5 8''')
+
|style="background-color:#FFF;padding:2px 10px"| '''1 4''' 2 5 8
 +
|style="background-color:#FFF;padding:2px 10px"|
 +
|-
 +
|style="background-color:#FFF;padding:2px 10px"| 1 '''4 2''' 5 8
 +
|style="background-color:#FFF;padding:2px 10px"| 1 '''2 4''' 5 8
 +
|style="background-color:#FFF;padding:2px 10px"| Меняет местами, так как 4 > 2
 +
|-
 +
|style="background-color:#FFF;padding:2px 10px"| 1 2 '''4 5''' 8
 +
|style="background-color:#FFF;padding:2px 10px"| 1 2 '''4 5''' 8
 +
|style="background-color:#FFF;padding:2px 10px"|
 +
|-
 +
|style="background-color:#FFF;padding:2px 10px"| 1 2 4 '''5 8'''  
 +
|style="background-color:#FFF;padding:2px 10px"| 1 2 4 '''5 8'''
 +
|style="background-color:#FFF;padding:2px 10px"|
 +
|}
  
 
Теперь массив полностью отсортирован, но неоптимизированный алгоритм проведет еще 2 прохода, на которых ничего не изменится.
 
Теперь массив полностью отсортирован, но неоптимизированный алгоритм проведет еще 2 прохода, на которых ничего не изменится.

Версия 04:40, 6 мая 2011

Сортировка простыми обменами, сортиро́вка пузырько́м (англ. bubble sort) — простой алгоритм сортировки. Сложность алгоритма: [math]O(n^2)[/math]

Алгоритм

Алгоритм состоит в повторяющихся проходах по сортируемому массиву. За каждый проход элементы последовательно сравниваются попарно и, если порядок в паре неверный, выполняется обмен элементов. Проходы по массиву повторяются до тех пор, пока на очередном проходе не окажется, что обмены больше не нужны, что означает — массив отсортирован. При проходе алгоритма, элемент, стоящий не на своём месте, «всплывает» до нужной позиции как пузырёк в воде, отсюда и название алгоритма.

Псевдокод

Вход: массив A, состоящий из элементов A[0], A[1], ..., A[n-1], который требуется отсортировать по возрастанию

  цикл для i = 0, 1, ..., n − 1:
    цикл для j = i + 1, ..., n − 2:
      если A[j] > A[j+1], то:
        обменять местами элементы A[j] и A[j+1]

Оптимизация

  • Внутренний цикл можно выполнять для [math]j = 0, 1, ..., n - i - 1[/math], где [math]i[/math] — номер итерации внешнего цикла, так как на [math]i[/math]-й итерации последние [math]i[/math] элементов массива уже будут правильно упорядочены.
  • Внешний цикл можно заменить на цикл вида: пока произведится хотя бы один обмен на очередной итерации внешнего цикла, продолжать выполнение.

И тогда псевдокод будет выглядеть так:

t := истина
цикл пока t:
  t := ложь
  цикл для j = 0, 1, ..., n − 2:
    если A[j] > A[j+1], то:
      обменять местами элементы A[j] и A[j+1]
      t := истина

Пример работы алгоритма

Возьмём массив с числами «5 1 4 2 8» и отсортируем значения по возрастанию, используя сортировку пузырьком. Выделены те элементы, которые сравниваются на данном этапе.


Первый проход:

До После Описание шага
5 1 4 2 8 1 5 4 2 8 Здесь алгоритм сравнивает два первых элемента и меняет их местами.
1 5 4 2 8 1 4 5 2 8 Меняет местами, так как 5 > 4
1 4 5 2 8 1 4 2 5 8 Меняет местами, так как 5 > 2
1 4 2 5 8 1 4 2 5 8 Теперь, ввиду того, что элементы стоят на своих местах (8 > 5), алгоритм не меняет их местами.

Второй проход:

До После Описание шага
1 4 2 5 8 1 4 2 5 8
1 4 2 5 8 1 2 4 5 8 Меняет местами, так как 4 > 2
1 2 4 5 8 1 2 4 5 8
1 2 4 5 8 1 2 4 5 8

Теперь массив полностью отсортирован, но неоптимизированный алгоритм проведет еще 2 прохода, на которых ничего не изменится.

См. также

Источники