hex309’s diary

備忘録としてぼちぼちやります。VBAネタが多くなりそうです

アルゴリズムのお勉強

頭のトレーニング用に最近買った本です。 

なっとく!アルゴリズム

なっとく!アルゴリズム

 

 この書籍、なかなか読みやすく分かりやすかったです。

サンプルコードはPythonで書かれてますが、Python知らなくても読めるでしょう。

さて、この書籍で紹介されていたコードを参考にちょっとVBAで書いてみました。

クイックソートです。

 

Private Sub QuickSortCollectionTest()
    Dim temp As Variant
    Dim data As Collection
    Dim i As Long

    Set data = New Collection
    data.Add 6
    data.Add 5
    data.Add 2
    data.Add 1

    Debug.Print QuickSortCollection(data)
End Sub

 

Private Function QuickSortCollection(ByVal data As Collection) As Variant
    Dim pivot As Variant
    Dim less As Collection
    Dim greater As Collection
    Dim i As Long

    Set less = New Collection
    Set greater = New Collection

    If data.Count = 0 Then
        QuickSortCollection = vbNullString
    ElseIf data.Count < 2 Then
        QuickSortCollection = data.Item(1)
    Else
        pivot = data.Item(1)
        For i = 2 To data.Count
            If data.Item(i) <= pivot Then
                less.Add data.Item(i)
            ElseIf data.Item(i) > pivot Then
                greater.Add data.Item(i)
            End If
        Next
        QuickSortCollection = QuickSortCollection(less) & pivot & QuickSortCollection(greater)
    End If
End Function

ここでは、配列ではなくてCollectionを使っています。もちろん、配列で書いてもいいんで、配列バージョンを書いたらアップします(いつになるかわかりませんが)。