Сортировка пузырьком: различия между версиями
[непроверенная версия] | [непроверенная версия] |
Содержимое удалено Содержимое добавлено
→Псевдокод: дополнение |
X7q (обсуждение | вклад) раньше было лучше |
||
Строка 1:
'''Сортировка простыми обменами''', '''сортиро́вка пузырько́м''' ({{lang-en|bubble sort}}) — простой [[алгоритм сортировки]]. Для понимания и реализации этот алгоритм — простейший, но эффективен он лишь для небольших массивов. Сложность алгоритма: [[O большое|O]](''n''²
Алгоритм считается учебным и практически не применяется вне учебной литературы, вместо него на практике применяются более эффективные алгоритмы сортировки. В то же время метод сортировки обменами лежит в основе некоторых более совершенных алгоритмов, таких как [[шейкерная сортировка]], [[пирамидальная сортировка]] и [[быстрая сортировка]].
== Алгоритм ==
Алгоритм состоит в повторяющихся проходах по сортируемому массиву. За каждый проход элементы последовательно сравниваются попарно и, если порядок в паре неверный, выполняется обмен элементов. Проходы по массиву повторяются до тех пор, пока на очередном проходе не окажется, что обмены больше не нужны, что означает — массив отсортирован.
== [[Псевдокод (язык описания алгоритмов)|Псевдокод]] ==
sc := 0;
▲ DIM A[N] REM массив A[] из N элементов, с нумерацией от A[1] до A[N]
'''цикл пока''' N - sc > 0:
'''цикл для''' i = 2, ..., N-sc:
'''если''' A[i] < A[i-1], '''то''':
поменять местами A[i] и A[i-1];
sc := sc + 1;
Обратите внимание, что количество повторов во внутреннем цикле уменьшается с каждым повторением внешнего цикла. Особенность данного алгоритма заключается в следующем: после первого завершения внутреннего цикла максимальный элемент массива всегда находится на N-ой позиции. При втором проходе, следующий по значению максимальный элемент будет находиться на N-1 месте. И так далее. Таким образом нет необходимости "обходить" весь массив от начала до конца каждый раз. Это ещё немного улучшает сортировку в части случаев.▼
▲Обратите внимание, что количество повторов во внутреннем цикле уменьшается с
Можно показать, что для сортировки требуется сделать не более N-1 проходов во внешнем цикле, поэтому в некоторых реализациях внешний цикл всегда выполняется ровно N-1 раз, и не отслеживается, были ли обмены на каждом проходе.▼
▲Можно показать, что для сортировки требуется сделать не более
Алгоритм можно немного улучшить, сделав следующее:
|