'===========================================================
'upQuickSort 指定された配列の整数を昇順ソートする
'---------引数----------------------------------------------
'data() ここのデータをソートする
'lef ソートする数列の左端の要素番号
'rig ソートする数列の右端の要素番号
'===========================================================
Public Sub upQuickSort(data() As Integer, _
lef As Integer, rig As Integer)
Dim temp As Integer
'左端と右端が一致していたならプロシージャを抜ける
If lef >= rig Then Exit Sub
'軸の値にdata(lef)を設定
i = lef + 1
j = rig
'左端要素番号 + 1 <= 右端要素番号の間
Do While i <= j
'軸の値data(lef)より大きい値を探す
Do While i <= j
'軸の値data(lef)より大きければ
If data(i) > data(lef) Then
Exit Do
End If
'この要素が軸の値data(lef)より小さい場合次の要素へ
i = i + 1
Loop
'軸の値data(lef)より小さい値を探す
Do While i <= j
'軸の値data(lef)より小さければ
If data(j) < data(lef) Then
Exit Do
End If
'この要素が軸の値data(lef)より大きい場合次の要素へ
j = j - 1
Loop
If i >= j Then Exit Do
temp = data(j)
data(j) = data(i)
data(i) = temp
i = i + 1
j = j - 1
Loop
temp = data(j)
data(j) = data(lef)
data(lef) = temp
Call upQuickSort(data, lef, j - 1)
Call upQuickSort(data, j + 1, rig)
End Sub
|