tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
ソート:シェルソート(VB6.0) ( No.1 )  [親スレッドへ]
日時: 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



 [スレッド一覧へ] [親スレッドへ]