Сортировка методом «пузырька»
Сортировка пузырьком (Bubble sort) – простой алгоритм сортировки обменами, который считается учебным и практически не применяется вне учебной литературы.
Пусть задан массив из n элементов. Для сортировки его элементов метод «пузырька» будет иметь следующую последовательность шагов.
1. Шаг инициализации. Для каждого прохода позиция последней перестановки элементов LastExchange принимается равной номеру последнего элемента массива n-1.
2. Шаг итерации. Для всех элементов с нулевой позиций до позиции последнего обмена производится сравнение со следующим элементом. Если текущий элемент оказывается больше следующего, то они переставляются, и позиция последнего обмена устанавливается равной текущему элементу.
3. Шаг выхода. Первый и второй шаги повторяются до тех пор, пока позиция последнего обмена не станет равной нулю.
Пример
Пусть дан следующий массив:
Проход 1
Проход 2
Оченка вычислительной сложности алгоритма показывает, что в наилучшем случае без учета LastExchange будет , т.е. .
Однако, на каждом (n-1) проходе сравниваемые элементы в наихудшем случае (когда массив отсортирован по убыванию) придется переставлять , т.е. число перестановок будет иметь порядок сложности . В наилучшем случае, когда массив отсортирован по возрастанию и используется позиция последней перестановки LastExchange, число сравнений будет (n-1), а перестановок не будет. Анализ общего случая затруднен из-за случайности обмена. Однако, из-за большого количества перестановок данный алгоритм является самый медленный из всех существующих.
Блок-схема алгоритма сортировки методом «пузырька» имеет следующий вид:
Реализовать данный алгоритм можно следующим образом:
template <class T>
void BubbleSort(T *A, const int n)
{
T temp;
int i=n-1, LastExchange=n-1;
while (i > 0)
{
i = 0;
for (int j = 0; j < LastExchange; j++)
if (A[j] > A[j+1])
{
Temp = A[j];
A[j] = A[j+1];
A[j+1]= temp;
i = j;
}
LastExchange = i;
}
}