Алгоритм быстрой сортировки чисел в массиве
Данный алгоритм реализует сортировку массива на основе сравнения чисел со случайно выбранным числом из массива. Особенно быстро проходит сортировка массивов с большим разбросом значений чисел. Функцию сортировки выполняет процедура SortArray, остальные процедуры вспомогательные.
Public Sub SortArray(ByRef Arr() As Double, ByVal Low As Long, ByVal High As Long)
Dim RandIndex As Long
Dim Prt As Double
Static I As Long, J As Long
If Low < High Then
If High - Low = 1 Then
If Arr(Low) > Arr(High) Then
Swap Arr(Low), Arr(High)
End If
Else
RandIndex = RandInt(Low, High)
Swap Arr(High), Arr(RandIndex)
Prt = Arr(High)
Do
I = Low:J = High
Do While (I < J) And (Arr(I) <= Prt)
I = I + 1
Loop
Do While (J > I) And (Arr(J) >= Prt)
J = J - 1
Loop
If I < J Then
Swap Arr(I), Arr(J)
End If
Loop While I < J
Swap Arr(I), Arr(High)
If (I - Low) < (High - I) Then
SortArray Arr(), Low, I - 1
SortArray Arr(), I + 1, High
Else
SortArray Arr(), I + 1, High
SortArray Arr(), Low, I - 1
End If
End If
End If
End Sub
Private Function RandInt(ByVal Lower As Long, ByVal Upper As Long) As Long
RandInt = Int(Rnd * (Upper - Lower + 1)) + Lower
End Function
Private Sub Swap(ByRef Expr1#, ByRef Expr2#)
Dim Temp#
Temp = Expr2
Expr2 = Expr1
Expr1 = Temp
End Sub
Аргументы процедуры:
- Arr() – собственно массив, который нужно сортировать. Массив должен быть типа double.
- Low, High – Нижний и верхний индексы участка который сортируется. Тип long.
Готовый модуль с процедурой можно взять здесь [1kb zip].
Юрасов Михаил
|