§Algorithm§


☆シェルソート(改良挿入法)☆


 シェルソートは、基本的に基本挿入法と変わりません。基本挿入法が1つの 数列に挿入していく方法であるのに対し、シェルソートは元の数列を仮想的に 複数の数列と考え、その1つ1つの数列に基本挿入法を用いて、徐々に数列の 数を減らし最終的に1つの数列にして、もう一度基本挿入法を行う方法です。

Visual Basicのプログラムコードでは以下のようにまとめられます。 降順ソートを示しています。

'===========================================================
'downShelSort 指定された配列の整数をシェルソート
'             (改良挿入法)でソートする−降順ソート
'---------引数----------------------------------------------
'data()   ここのデータをソートする
'Count    要素の数
'===========================================================
Public Sub downShelSort(data() As Integer, Count As Integer)
    Dim i As Integer, j As Integer, k As Integer
    Dim temp As Integer
    Dim gap As Integer '数列のとび

    gap = Count \ 2 'とびの初期値
    'とびが1のとき、普通の基本挿入法
    Do While gap > 0
        '数列番号−0からgapまで
        k = 0
        Do While k < gap
            '数列kの要素と比べる最初の要素
            j = k + gap
            '数列kに挿入していく
            Do While j < Count '配列数まで
                'まず数列kの右端の要素と比べる
                i = j - gap
                Do While i >= k '数列kの最初の要素まで
                    If data(i + gap) > data(i) Then
                        temp = data(i + gap)
                        data(i + gap) = data(i)
                        data(i) = temp
                    Else
                        Exit Do
                    End If
                    '1つずつ左にずれる
                    i = i - gap
                Loop
                '1つずつ右にずれる
                j = j + gap
            Loop
            '次の数列に
            k = k + 1
        Loop
        'とびの変更
        gap = gap \ 2
    Loop
End Sub

 配列が大きくなると、基本挿入法との早さの違いがはっきりとわかります。


(サンプルプログラムの動作確認)

機種 PC-9821V13S
OS Windows95
開発ツール Visual Basic Ver.4.0
更新日 99/12/30

ダウンロード SSort.lzh(2.44KB)

Visual Basic Ver.5.0,Ver.6.0でも問題なく動作すると思います。
なお、このコーナーに掲載されているプログラムコード、およびプログラムファ イルが原因で起きた損害などに関して一切の責任を負うことはできません。

★このコーナーに掲載されているプログラムコード、およびプログラムファ イルを無断で配布・転載することは、原則として禁止です。


Algorithmインデックス トップ


Copyright(C)1999 Tomoya. All rights reserved.