http://fussy.web.fc2.com/algo/sort1_slow_sort.htm
サイクルソートを説明している日本語のページが1つしか見つからなかったのだけれども、それが詳しく書いてあってありがたかった。というわけで、VBScriptで実装してみた。
Sub Cyclesort(ByRef a)
Dim i, c, j, t
i = 0
Do
c = i
For j = i + 1 To UBound(a)
If (a(i) > a(j)) Then
c = c + 1
End If
Next
If (c = i) Then
i = i + 1
If (i >= UBound(a)) Then
Exit Do
End If
Else
Do While (a(i) = a(c))
c = c + 1
Loop
t = a(c)
a(c) = a(i)
a(i) = t
End If
Loop
End Sub
ところで、リンク先のページでノームソートというのを初めて知ったのだけれども、いままでこれ挿入ソートだと思ってた。ノームソートを挿入ソートとして紹介しているページもたぶんあるはず。挿入ソートで交換を行うようにしたらノームソートになるのか。

