シェルソート

挿入ソートのコードを改良してシェルソートのコードを作成した。
正しく動作することは確認したが、自分にとっては実装するには複雑すぎてコードを見ただけでは正しいかどうか判断が難しい。アルゴリズムとしては明快なのであるが...。try and errorでようやく正しい答えを得ることができた。

""" Shell sort   Aug. 09, 2007
"""

data = [2,15,23,40,56,1,12,54,27,6,3,5,67,87,22,38,92]
print data

dsep = len(data)/2

while 1:
    for N in range(1, dsep):
        for i in range(N, len(data), N):
            tmp = data[i]
            j = i
            while tmp < data[j-N] and j>=N:
                data[j] = data[j-N]
                j -= N
            data[j] = tmp
    if dsep == 0:
        break
    dsep /=2

print data