もっとこまかくしたいな。
'Sub関数宣言(引数:array=配列、first=開始位置、last=終了位置)
Sub quicksort(array, first, last)
'変数宣言(point=配列の値, f=, l, tmp)
Dim point, f, l, tmp
'一番初めの配列の値を格納する
point = array(first)
'開始位置と終了位置を格納する
f = first: l = last
'ループ処理
Do
'値同士を比較して、一番初めに格納した値よりも小さければ、fを加算し続ける
While array(f) < point: f = f + 1: Wend
'値同士を比較して、一番初めに格納した値よりも大きければ、lを減算し続ける
While array(l) > point: l = l - 1: Wend
'fがlと一致するかlよりも大きい場合ループ処理を抜ける
If f >= l Then Exit Do
'fがlより小さい場合f番目の配列の値をtmpに格納する、
'f番目の配列の値にl番目の配列の値を格納する、
'l番目の配列の値にtmpを格納する
'(要するにf番目の配列とl番目の配列を入れ替える)
tmp = array(f): array(f) = array(l): array(l) = tmp
'fに1加算、lから1減算
f = f + 1: l = l - 1
Loop
'引数の開始位置よりもf-1が大きい場合再帰する(引数に配列、開始位置、f-1を設定)
If first < f - 1 Then quicksort array, first, f - 1
'l+1よりも引数の終了位置が大きい場合再帰する(引数に配列、l+1、終了位置を設定)
If l + 1 < last Then quicksort array, l + 1, last
'関数終了
End Sub