- 日時: 2011/04/05 11:36
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[文字列処理][アルゴリズム][] * * キーワード:アルゴリズム,並べ替える,小さい順(昇順),大きい順(降順),並び替え * ***********************************************************************************
【開設当初の掲示板に投稿頂いていた分です】
----------------------------------------------------------------------- ソート:シェルソート 投稿者:ゆう(U) [1998/9/14(月)15:24分] -----------------------------------------------------------------------
'シェルソート(Long版) 'Sorted(省略可能) = True :昇順(デフォルト) ' False:降順 Public Sub sShellSort(ByRef myArray() As Long, _ Optional Sorted As Boolean = True) Dim i As Long, j As Long, k As Long Dim intMyPointer As Integer Dim lngGap As Long Dim lngLow As Long, lngHigh As Long, lngCount As Long Dim tmpArray As Long
intMyPointer = Screen.MousePointer Screen.MousePointer = vbHourglass lngLow = LBound(myArray) lngHigh = UBound(myArray) lngCount = lngHigh - lngLow + 1 lngGap = 1
k = Int(lngCount / 3) Do While (lngGap < k) lngGap = lngGap * 3 + 1 Loop
If Sorted Then Do While (lngGap > 0) For i = lngGap + lngLow To lngHigh j = i tmpArray = myArray(j) Do While j >= lngGap + lngLow If myArray(j - lngGap) <= tmpArray Then Exit Do myArray(j) = myArray(j - lngGap) j = j - lngGap Loop myArray(j) = tmpArray Next i lngGap = Int(lngGap / 3) Loop Else Do While (lngGap > 0) For i = lngGap + lngLow To lngHigh j = i tmpArray = myArray(j) Do While j >= lngGap + lngLow If myArray(j - lngGap) >= tmpArray Then Exit Do myArray(j) = myArray(j - lngGap) j = j - lngGap Loop myArray(j) = tmpArray Next i lngGap = Int(lngGap / 3) Loop End If Screen.MousePointer = intMyPointer End Sub
|