Сортировка — это фундаментальная операция в программировании, которая позволяет нам располагать данные в определенном порядке. В этой статье блога мы углубимся в различные методы сортировки в VBA, уделив особое внимание решениям, основанным на примерах RosettaCode. Мы рассмотрим различные алгоритмы сортировки, сопровождаемые разговорными объяснениями и примерами кода, которые помогут вам легко усвоить эти концепции. Итак, будьте готовы развеять мифы о сортировке VBA с помощью RosettaCode!
Метод 1: пузырьковая сортировка
Пузырьковая сортировка – это простой алгоритм сортировки, который многократно проходит по списку, сравнивает соседние элементы и меняет их местами, если они расположены в неправильном порядке. Процесс продолжается до тех пор, пока список не будет отсортирован.
Sub BubbleSort(arr() As Variant)
Dim i As Long, j As Long
Dim temp As Variant
For i = LBound(arr) To UBound(arr) - 1
For j = i + 1 To UBound(arr)
If arr(i) > arr(j) Then
temp = arr(i)
arr(i) = arr(j)
arr(j) = temp
End If
Next j
Next i
End Sub
Метод 2: Быстрая сортировка
Быстрая сортировка — это алгоритм «разделяй и властвуй», который работает путем выбора основного элемента из массива и разделения остальных элементов на два подмассива в зависимости от того, меньше они или больше, чем стержень. Затем процесс рекурсивно применяется к подмассивам.
Sub QuickSort(arr() As Variant, ByVal left As Long, ByVal right As Long)
Dim i As Long, j As Long
Dim pivot As Variant, temp As Variant
i = left
j = right
pivot = arr((left + right) \ 2)
While i <= j
While arr(i) < pivot
i = i + 1
Wend
While arr(j) > pivot
j = j - 1
Wend
If i <= j Then
temp = arr(i)
arr(i) = arr(j)
arr(j) = temp
i = i + 1
j = j - 1
End If
Wend
If left < j Then QuickSort arr, left, j
If i < right Then QuickSort arr, i, right
End Sub
Метод 3: сортировка слиянием
Сортировка слиянием — это эффективный, стабильный алгоритм сортировки на основе сравнения, который работает путем разделения неотсортированного списка на n подсписков, где n — количество элементов в списке, и многократного слияния. соседние подсписки, пока не останется только один подсписок.
Sub MergeSort(arr() As Variant, ByVal left As Long, ByVal right As Long)
If left < right Then
Dim middle As Long
middle = (left + right) \ 2
MergeSort arr, left, middle
MergeSort arr, middle + 1, right
Merge arr, left, middle, right
End If
End Sub
Sub Merge(arr() As Variant, ByVal left As Long, ByVal middle As Long, ByVal right As Long)
Dim i As Long, j As Long, k As Long
Dim n1 As Long, n2 As Long
n1 = middle - left + 1
n2 = right - middle
Dim L() As Variant, R() As Variant
ReDim L(n1)
ReDim R(n2)
For i = 0 To n1 - 1
L(i) = arr(left + i)
Next i
For j = 0 To n2 - 1
R(j) = arr(middle + 1 + j)
Next j
i = 0
j = 0
k = left
While i < n1 And j < n2
If L(i) <= R(j) Then
arr(k) = L(i)
i = i + 1
Else
arr(k) = R(j)
j = j + 1
End If
k = k + 1
Wend
While i < n1
arr(k) = L(i)
i = i + 1
k = k + 1
Wend
While j < n2
arr(k) = R(j)
j = j + 1
k = k + 1
Wend
End Sub
Метод 4: сортировка выбором
Сортировка выбором — это алгоритм сортировки сравнением на месте, который делит входной список на две части: «VBA Sort RosettaCode», переведенный на английский язык: «Сортировка в VBA с использованием примеров RosettaCode»