| FAQ по Visual Basic |
| Содержание / Начальные сведения о VB |
|
|
§ 3.6. Сортировка данных
В этот статье я обращаюсь к операции, довольно часто выполняемой практической в любой программе — сортировке. Обычно программисты реализуют один из двух алгоритмов — пузырьковая сортировка или сортировка выборкой. Оба достаточно простые, но зато очень тормозные. Гораздо предпочтительнее воспользоваться готовой реализацией более быстрого алгоритма, например, быстрой сортировки (quicksort).
Public Sub QuickSortVariantArray( _
avarIn() As Variant, _
ByVal intLowBound As Long, _
ByVal intHighBound As Long)
' Comments : Quicksorts the passed array of Variants
' Parameters: avarIn() - array of Variant that gets sorted
' intLowBound - low bound of array
' intHighBound - high bound of arrayM
' Returns : Nothing
' Source : Total VB SourceBook 6
'
Dim intX As Long
Dim intY As Long
Dim varMidBound As Variant
Dim varTmp As Variant
On Error GoTo PROC_ERR
' If there is data to sort
If intHighBound > intLowBound Then
' Calculate the value of the middle array element
varMidBound = avarIn((intLowBound + intHighBound) \ 2)
intX = intLowBound
intY = intHighBound
' Split the array into halves
Do While intX <= intY
If avarIn(intX) >= varMidBound And _
avarIn(intY) <= varMidBound _
Then
varTmp = avarIn(intX)
avarIn(intX) = avarIn(intY)
avarIn(intY) = varTmp
intX = intX + 1
intY = intY - 1
Else
If avarIn(intX) < varMidBound Then
intX = intX + 1
End If
If avarIn(intY) > varMidBound Then
intY = intY - 1
End If
End If
Loop
' Sort the lower half of the array
QuickSortVariantArray avarIn(), intLowBound, intY
' Sort the upper half of the array
QuickSortVariantArray avarIn(), intX, intHighBound
End If
PROC_EXIT:
Exit Sub
PROC_ERR:
MsgBox "Error: " & Err.Number & ". " & Err.Description, , _
"QuickSortVariantArray"
Resume PROC_EXIT
End Sub
Если ваш массив имеет тип, отличный от Variant, например, String, создайте копию этой процедуры и измените в ней все типы с Variant на тот, что вам нужен.
Автор: |
||
| Предыдущий раздел | Следующий раздел |
| © 2004. При цитировании, пожалуйста, не забудьте поставить ссылку на оригинальную страницу. |