Created
November 23, 2012 08:26
-
-
Save nobrinskii/4134517 to your computer and use it in GitHub Desktop.
文字列の配列をクイックソートする
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'------------------------------------------------------------------------------ | |
'文字列として配列をクイックソート | |
'------------------------------------------------------------------------------ | |
'【引数】配列(参照渡し)、最小インデックス、最大インデックス | |
'【戻り値】 | |
'【備考】 | |
Public Sub QSortTexts(ByRef varArray As Variant, _ | |
lngMini As Long, lngMax As Long) | |
Dim i As Long | |
Dim j As Long | |
Dim varBaseValue As Variant | |
Dim varTmp As Variant | |
varBaseValue = CStr(varArray(Int((lngMini + lngMax) / 2))) | |
i = lngMini | |
j = lngMax | |
Do | |
Do While StrComp(CStr(varArray(i)), varBaseValue) = -1 | |
i = i + 1 | |
Loop | |
Do While StrComp(CStr(varArray(j)), varBaseValue) = 1 | |
j = j - 1 | |
Loop | |
If i >= j Then Exit Do | |
varTmp = varArray(i) | |
varArray(i) = varArray(j) | |
varArray(j) = varTmp | |
i = i + 1 | |
j = j - 1 | |
Loop | |
If (lngMini < i - 1) Then | |
Call QSortTexts(varArray, lngMini, i - 1) | |
End If | |
If (lngMax > j + 1) Then | |
Call QSortTexts(varArray, j + 1, lngMax) | |
End If | |
End Sub |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment