VBAにはソートに関する関数が見当たりません。
そこで作ってみました。
バブルソート
Function bubble_sort(ar)
num = UBound(ar)
For i = 0 To num - 1
For j = i + 1 To num
If ar(i) > ar(j) Then
temp = ar(i)
ar(i) = ar(j)
ar(j) = temp
End If
Next j
Next i
End Function
num = UBound(ar)
For i = 0 To num - 1
For j = i + 1 To num
If ar(i) > ar(j) Then
temp = ar(i)
ar(i) = ar(j)
ar(j) = temp
End If
Next j
Next i
End Function
選択ソート
Function selection_sort(ar)
num = UBound(ar)
For i = 0 To num - 1
mini = ar(i)
k = i
For j = i + 1 To num
If ar(j) < mini Then
mini = ar(j)
k = j
End If
Next j
temp = ar(i)
ar(i) = ar(k)
ar(k) = temp
Next i
End Function
num = UBound(ar)
For i = 0 To num - 1
mini = ar(i)
k = i
For j = i + 1 To num
If ar(j) < mini Then
mini = ar(j)
k = j
End If
Next j
temp = ar(i)
ar(i) = ar(k)
ar(k) = temp
Next i
End Function
使い方
Sub test()
Dim ar(2) As Double
ar(0) = 3.5
ar(1) = 2.1
ar(2) = 3.2
Call bubble_sort(ar)
End Sub
Dim ar(2) As Double
ar(0) = 3.5
ar(1) = 2.1
ar(2) = 3.2
Call bubble_sort(ar)
End Sub
配列(1次元)を作ります。値は倍精度としました。
「Call bubble_sort(ar)」として関数を呼び出すと与えた配列をソートします。
この後の配列変数はソートが反映されています。
試しに1万件の処理速度を調べたところ、バブルソートを100とすると選択ソートは25でした。
昇順にのみ対応しています。
Excelで使うことを想定していますが、Wordでも使えます。
数値のソートに対応していますが、文字列のソートには対応していません。Wordで使うには文字列のソートに対応する必要があるかもしれません。
コメント
bubble_sort(ar) 挙動がおかしいです。
「 For j = i + 1 To num」→「 For j = i + 1 To num-1」ですね。
大塚さん
確認しましたが、元のままでいいと思います。