Сложность алгоритма: O(n^2)
Суть алгоритма сортировки пузырьком в том, что элементы сортируемой последовательности рассматриваются попарно: два стоящий рядом элемента. Если эти два элемента стоят в неверном порядке, они меняются местами.
Когда БИ проходит по всем парам, цикл (перестановок) повторяется. Если при этом БИ не приходится менять местами ни одну из пар (все т.е. элементы стоят в нужном порядке) - последовательность считается отсортированной.
Пример в псевдокоде:
- Код: Выделить всё
list[0 to 100] // последовательность, заполнненная числами (неотсортированная)
var bSwapped
var i
SortLoop:
bSwapped = False
for i = 0 to 100 - 1
if list[i] > list[i+1] then
bSwapped = True
swap(list[i], list[i+1]) // Меняем местами значение элементов последовательности
end if
next i
if bSwapped = True then goto SortLoop
Реализация алгоритма пузырьковой сортировки на VB:
- Код: Выделить всё
Public Sub Swap(ByRef a As Long, ByRef b As Long)
Dim c As Long
c = a
a = b
b = c
End Sub
Public Sub BubbleSort(ByRef SortArray() As Long)
Dim i As Long
Dim bSwapped As Boolean
Do
bSwapped = False
For i = LBound(SortArray) To UBound(SortArray) - 1
If SortArray(i) > SortArray(i + 1) Then
bSwapped = True
Swap SortArray(i), SortArray(i + 1)
End If
Next i
Loop While bSwapped
End Sub
Этот код сортирует последовательность в порядке возрастания. Для того, чтобы он сортировал последовательность в порядке убывания, необходимо в строке [ If SortArray(i) > SortArray(i + 1) Then] заменить оператор > на оператор <.
Пример использования:
- Код: Выделить всё
Dim foo(1 To 10) As Long
foo(1) = 10
foo(2) = 1
foo(3) = 9
foo(4) = 2
foo(5) = 8
foo(6) = 3
foo(7) = 7
foo(8) = 4
foo(9) = 5
foo(10) = 6
BubbleSort ega
For i = 1 To 10
Debug.Print foo(i)
Next i