配列の要素を昇順でソート(クイックソート)

配列の要素を昇順でソートする。(クイックソート)

配列の要素を昇順でソートします。
サンプルコードにはクイックソートを利用したコードを掲載しています。

※クイックソートとは基準値を定めてその基準値より小さい値のグループと大きい値のグループに分け、分けたそれぞれのグループの中でさらに同じようにグループ分け繰り返し行う(ソート処理をしているSubプロシージャを再帰的に実行する)ことで、最終的に全体の並べ替えを完了させるソートの方法になります。

'******************************************************************
' 配列のソート
'******************************************************************
Sub Main_ArySort()

    Dim vAryData(6) As Variant
    '配列内のデータ作成
    vAryData(0) = "02_神奈川"
    vAryData(1) = "04_千葉"
    vAryData(2) = "03_埼玉"
    vAryData(3) = "06_栃木"
    vAryData(4) = "07_群馬"
    vAryData(5) = "01_東京"
    vAryData(6) = "05_茨城"

    '配列内を昇順でソート
    Call sortQuick_Asc(vAryData, LBound(vAryData), UBound(vAryData))
    
    '配列の中を順次表示
    Dim i As Long
    For i = 0 To UBound(vAryData)
        Debug.Print vAryData(i)
    Next
    
End Sub

'******************************************************************
' 配列を昇順でソート(クイックソート)
'------------------------------------------------------------------
'   第1引数:配列データ(参照渡し)
'   第2引数:配列の最小要素数
'   第3引数:配列の最大要素数
'******************************************************************
Function sortQuick_Asc(ByRef vAryData() As Variant, lLow As Long, lUp As Long) As Variant
    
    '基準値
    Dim vStd  As Variant
    vStd = vAryData(Int((lLow + lUp) / 2))
    
    Dim i As Long
    i = lLow
    
    Dim j As Long
    j = lUp
    
    Dim vTemp As Variant
    
    Do
        '基準値より小さい間はループ
        Do While vAryData(i) < vStd
            i = i + 1
        Loop
        
        '基準値より大きい間はループ
        Do While vAryData(j) > vStd
            j = j - 1
        Loop
        
        'ループ終了判定
        If i >= j Then
            Exit Do
        End If
        
        vTemp = vAryData(i)
        vAryData(i) = vAryData(j)
        vAryData(j) = vTemp
        i = i + 1
        j = j - 1
    Loop
    
    '再帰呼び出し
    If (lLow < i - 1) Then
        Call sortQuick_Asc(vAryData, lLow, i - 1)
    End If
    
    If (lUp > j + 1) Then
        Call sortQuick_Asc(vAryData, j + 1, lUp)
    End If
    
End Function

 ■実行結果