アルゴリズムのお勉強
頭のトレーニング用に最近買った本です。
この書籍、なかなか読みやすく分かりやすかったです。
サンプルコードは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を使っています。もちろん、配列で書いてもいいんで、配列バージョンを書いたらアップします(いつになるかわかりませんが)。