Bubble Sort — это элементарный алгоритм сортировки, который работает путем многократного обмена смежными элементами, если это необходимо. Когда обмены не требуются, файл сортируется.
Это самый простой метод среди всех алгоритмов сортировки.
Algorithm: Sequential-Bubble-Sort (A)
fori← 1 to length [A] do
for j ← length [A] down-to i +1 do
if A[A] < A[j - 1] then
Exchange A[j] ↔ A[j-1]
Реализация
voidbubbleSort(int numbers[], intarray_size) {
inti, j, temp;
for (i = (array_size - 1); i >= 0; i--)
for (j = 1; j <= i; j++)
if (numbers[j - 1] > numbers[j]) {
temp = numbers[j-1];
numbers[j - 1] = numbers[j];
numbers[j] = temp;
}
}
Анализ
Здесь количество сравнений
1 + 2 + 3 + … + ( n — 1) = n ( n — 1) / 2 = O ( n 2 )
Ясно, что график показывает характер n 2 типа пузырьков.
В этом алгоритме число сравнений не зависит от набора данных, т. Е. Находятся ли предоставленные входные элементы в отсортированном порядке или в обратном порядке или в случайном порядке.
Требование к памяти
Из алгоритма, изложенного выше, ясно, что сортировка пузырьков не требует дополнительной памяти.
пример
|
Несортированный список: |
|
Несортированный список:
1- я итерация:
|
5> 2 своп |
|
|||||||
|
5> 1 своп |
|
|||||||
|
5> 4 своп |
|
|||||||
|
5> 3 своп |
|
|||||||
|
5 <7 без обмена |
|
|||||||
|
Своп 7> 6 |
|
5> 2 своп
5> 1 своп
5> 4 своп
5> 3 своп
5 <7 без обмена
Своп 7> 6
2- я итерация:
|
2> 1 своп |
|
|||||||
|
2 <4 без обмена |
|
|||||||
|
Своп 4> 3 |
|
|||||||
|
4 <5 без обмена |
|
|||||||
|
5 <6 без обмена |
|
2> 1 своп
2 <4 без обмена
Своп 4> 3
4 <5 без обмена
5 <6 без обмена
Нет изменений в 3- й , 4- й , 5- й и 6- й итерации.
В заключение,
отсортированный список