teacup. [ 掲示板 ] [ 掲示板作成 ] [ 有料掲示板 ] [ ブログ ]


新着順:9/21 記事一覧表示 | 《前のページ | 次のページ》

クイックソート

 投稿者:anon14  投稿日:2008年 6月22日(日)19時40分31秒
  通報 返信・引用
  Option Explicit

Sub クイックソート()
   Dim 新メンバーテーブル() As String
   Dim 新メンバー数 As Long
   Dim 順序 As String

   Dim 文書ソートテーブル() As String

   Dim i As Long

   Dim Message As String
   Dim BoxType As Long
   Dim BoxTitle  As String
   Dim Answer As Integer

   新メンバー数 = 10
   ReDim 新メンバーテーブル(1 To 新メンバー数) As String
   ReDim 文書ソートテーブル(1 To 新メンバー数) As String

   新メンバーテーブル(1) = "A01"
   新メンバーテーブル(2) = "A05"
   新メンバーテーブル(3) = "A09"
   新メンバーテーブル(4) = "A02"
   新メンバーテーブル(5) = "A04"
   新メンバーテーブル(6) = "A10"
   新メンバーテーブル(7) = "A03"
   新メンバーテーブル(8) = "A07"
   新メンバーテーブル(9) = "A08"
   新メンバーテーブル(10) = "A06"

   For i = 1 To 新メンバー数
      文書ソートテーブル(i) = 新メンバーテーブル(i)
   Next

   順序 = "昇順"
   Call クイックソート2(文書ソートテーブル(), 1, 新メンバー数, 順序)

   Message = "前     後" + Chr(13) + Chr(10)
   Message = Message + 新メンバーテーブル(1) + "   " + 文書ソートテーブル(1) + Chr(13) + Chr(10)
   Message = Message + 新メンバーテーブル(2) + "   " + 文書ソートテーブル(2) + Chr(13) + Chr(10)
   Message = Message + 新メンバーテーブル(3) + "   " + 文書ソートテーブル(3) + Chr(13) + Chr(10)
   Message = Message + 新メンバーテーブル(4) + "   " + 文書ソートテーブル(4) + Chr(13) + Chr(10)
   Message = Message + 新メンバーテーブル(5) + "   " + 文書ソートテーブル(5) + Chr(13) + Chr(10)
   Message = Message + 新メンバーテーブル(6) + "   " + 文書ソートテーブル(6) + Chr(13) + Chr(10)
   Message = Message + 新メンバーテーブル(7) + "   " + 文書ソートテーブル(7) + Chr(13) + Chr(10)
   Message = Message + 新メンバーテーブル(8) + "   " + 文書ソートテーブル(8) + Chr(13) + Chr(10)
   Message = Message + 新メンバーテーブル(9) + "   " + 文書ソートテーブル(9) + Chr(13) + Chr(10)
   Message = Message + 新メンバーテーブル(10) + "   " + 文書ソートテーブル(10)
   BoxTitle = "クイックソート(昇順)"
   Answer = MsgBox(Message, , BoxTitle)

   For i = 1 To 新メンバー数
      文書ソートテーブル(i) = 新メンバーテーブル(i)
   Next

   順序 = "降順"
   Call クイックソート2(文書ソートテーブル(), 1, 新メンバー数, 順序)

   Message = "前     後" + Chr(13) + Chr(10)
   Message = Message + 新メンバーテーブル(1) + "   " + 文書ソートテーブル(1) + Chr(13) + Chr(10)
   Message = Message + 新メンバーテーブル(2) + "   " + 文書ソートテーブル(2) + Chr(13) + Chr(10)
   Message = Message + 新メンバーテーブル(3) + "   " + 文書ソートテーブル(3) + Chr(13) + Chr(10)
   Message = Message + 新メンバーテーブル(4) + "   " + 文書ソートテーブル(4) + Chr(13) + Chr(10)
   Message = Message + 新メンバーテーブル(5) + "   " + 文書ソートテーブル(5) + Chr(13) + Chr(10)
   Message = Message + 新メンバーテーブル(6) + "   " + 文書ソートテーブル(6) + Chr(13) + Chr(10)
   Message = Message + 新メンバーテーブル(7) + "   " + 文書ソートテーブル(7) + Chr(13) + Chr(10)
   Message = Message + 新メンバーテーブル(8) + "   " + 文書ソートテーブル(8) + Chr(13) + Chr(10)
   Message = Message + 新メンバーテーブル(9) + "   " + 文書ソートテーブル(9) + Chr(13) + Chr(10)
   Message = Message + 新メンバーテーブル(10) + "   " + 文書ソートテーブル(10)
   BoxTitle = "クイックソート(降順)"
   Answer = MsgBox(Message, , BoxTitle)
End Sub
Rem *************************************************************************************
Rem *   サブルーチン名:  クイックソート2                                                                              *
Rem *                                                                                                                            *
Rem *   機能概要:  クイックソートで文書データを昇順/降順にソートします。                                  *
Rem *                                                                                                                            *
Rem *  呼び出し手順:                                                                                                      *
Rem *         Call クイックソート2(文書ソートテーブル() , 1 , DataCount , 順序)                                *
Rem *                                                                                                                            *
Rem *  引数:                                                                                                                 *
Rem *               引数名          型              内容                                                    *
Rem *         文書ソートテーブル String  文書ソートテーブルの先頭を指定します。                           *
Rem *         1                        Long    文書ソートテーブルの最初の配列インデックスを指定します。   *
Rem *         DataCount            Long    文書ソートテーブルの配列要素数を指定します。                  *
Rem *         順序                    String  ソートの順序を指定します。                                             *
Rem *                                                    ""/"昇順":文書データを昇順にソートします。             *
Rem *                                                          "降順":文書データを降順にソートします。             *
Rem *************************************************************************************
Sub クイックソート2(文書ソートテーブル() As String, StartIndex As Long, EndIndex As Long, 順序 As String)
     Dim Forward            As Long
     Dim Backward          As Long
     Dim Ref                  As String
     Dim TempString        As String

     If (StartIndex < EndIndex) Then
          Forward = StartIndex
          Backward = EndIndex + 1

          Ref = 文書ソートテーブル(StartIndex)
          Do While 1
               Do While (Forward < EndIndex)
                    Forward = Forward + 1
                    If (順序 = "降順") Then
                         Rem ***********************************
                         Rem *   文書データを降順にソートします。   *
                         Rem ***********************************
                         If (文書ソートテーブル(Forward) <= Ref) Then
                              Exit Do
                         End If
                    Else
                         Rem ***********************************
                         Rem *   文書データを昇順にソートします。   *
                         Rem ***********************************
                         If (文書ソートテーブル(Forward) >= Ref) Then
                              Exit Do
                         End If
                    End If
               Loop
               Do While (Backward > StartIndex)
                    Backward = Backward - 1
                    If (順序 = "降順") Then
                         Rem ***********************************
                         Rem *   文書データを降順にソートします。   *
                         Rem ***********************************
                         If (文書ソートテーブル(Backward) >= Ref) Then
                              Exit Do
                         End If
                    Else
                         Rem ***********************************
                         Rem *   文書データを昇順にソートします。   *
                         Rem ***********************************
                         If (文書ソートテーブル(Backward) <= Ref) Then
                              Exit Do
                         End If
                    End If
               Loop
               If (Forward >= Backward) Then
                    Exit Do
               End If
               TempString = 文書ソートテーブル(Forward)
               文書ソートテーブル(Forward) = 文書ソートテーブル(Backward)
               文書ソートテーブル(Backward) = TempString
          Loop
          文書ソートテーブル(StartIndex) = 文書ソートテーブル(Backward)
          文書ソートテーブル(Backward) = Ref

          Call クイックソート2(文書ソートテーブル(), StartIndex, Backward - 1, 順序)
          Call クイックソート2(文書ソートテーブル(), Backward + 1, EndIndex, 順序)
     End If
End Sub
 
 
》記事一覧表示

新着順:9/21 《前のページ | 次のページ》
/21