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

Материал из Викиконспекты
Перейти к: навигация, поиск
м
Строка 1: Строка 1:
'''Сортировка простыми обменами''', '''сортиро́вка пузырько́м''' (англ. ''bubble sort'') — простой алгоритм сортировки. Сложность алгоритма: O(''n''²).
+
'''Сортировка простыми обменами''', '''сортиро́вка пузырько́м''' (англ. ''bubble sort'') — простой алгоритм сортировки. Сложность алгоритма: <tex>O(n^2)</tex>
  
 
== Алгоритм ==
 
== Алгоритм ==
Строка 31: Строка 31:
 
'''Первый проход:'''
 
'''Первый проход:'''
  
('''5 1''' 4 2 8) ('''1 5''' 4 2 8), Здесь алгоритм сравнивает два первых элемента и меняет их местами.
+
{| style="background-color:#CCC;margin:0.5px"
 
+
!style="background-color:#EEE"| До
(1 '''5 4''' 2 8) (1 '''4 5''' 2 8), Меняет местами, так как 5 > 4
+
!style="background-color:#EEE"| После
 
+
!style="background-color:#EEE"| Описание шага
(1 4 '''5 2''' 8) (1 4 '''2 5''' 8), Меняет местами, так как 5 > 2
+
|-
 
+
|style="background-color:#FFF;padding:2px 10px"| '''5 1''' 4 2 8
(1 4 2 '''5 8''') (1 4 2 '''5 8'''), Теперь, ввиду того, что элементы стоят на своих местах (8 > 5), алгоритм не меняет их местами.
+
|style="background-color:#FFF;padding:2px 10px"| '''1 5''' 4 2 8
 
+
|style="background-color:#FFF;padding:2px 10px"| Здесь алгоритм сравнивает два первых элемента и меняет их местами.
 +
|-
 +
|style="background-color:#FFF;padding:2px 10px"| 1 '''5 4''' 2 8  
 +
|style="background-color:#FFF;padding:2px 10px"| 1 '''4 5''' 2 8
 +
|style="background-color:#FFF;padding:2px 10px"| Меняет местами, так как 5 > 4
 +
|-
 +
|style="background-color:#FFF;padding:2px 10px"| 1 4 '''5 2''' 8
 +
|style="background-color:#FFF;padding:2px 10px"| 1 4 '''2 5''' 8
 +
|style="background-color:#FFF;padding:2px 10px"| Меняет местами, так как 5 > 2
 +
|-
 +
|style="background-color:#FFF;padding:2px 10px"| 1 4 2 '''5 8'''  
 +
|style="background-color:#FFF;padding:2px 10px"| 1 4 2 '''5 8'''
 +
|style="background-color:#FFF;padding:2px 10px"| Теперь, ввиду того, что элементы стоят на своих местах (8 > 5), алгоритм не меняет их местами.
 +
|}
  
 
'''Второй проход:'''
 
'''Второй проход:'''

Версия 03:36, 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 прохода, на которых ничего не изменится.

См. также

Источники