Option Explicit 'ソート '6月25日の週の課題 'swap サブルーチンの追加 ' 'コマンドボタン名の変更 ' 逐次 cmdTikuji ' バブル cmdBubble ' シェーカ cmdShake ' 挿入 cmdSounyu ' 「次?」の表示をviewへ移動 ' ソートロジック追加 ' シェルソート cmdShell Const N = 10 Dim a(N - 1) As Integer Sub swap(x As Integer, y As Integer) Dim temp As Integer temp = x x = y y = temp End Sub Sub init() Dim i As Integer Randomize For i = 0 To N - 1 a(i) = Int(99 * Rnd + 1) Next i End Sub '表示 Sub view() Dim k As Integer Picture1.Cls For k = 0 To N - 1 Picture1.Print a(k); Next k MsgBox ("次?") End Sub '直接選択法 Private Sub cmdTikuji_Click() Dim i As Integer Dim j As Integer Dim Min As Integer Dim s As Integer init view For i = 0 To N - 2 Min = a(i) s = i For j = i + 1 To N - 1 If Min > a(j) Then Min = a(j) s = j End If Next j swap a(i), a(s) view Next i End Sub 'バブルソート Private Sub cmdBubble_Click() Dim i As Integer Dim j As Integer init view For i = 0 To N - 2 For j = N - 1 To i + 1 Step -1 If a(j) < a(j - 1) Then swap a(j), a(j - 1) End If view Next j Next i End Sub 'シェーカ・ソート Private Sub cmdShake_Click() Dim L Dim R Dim i Dim shift init view L = 0: R = N - 1 Do While L < R For i = L To R - 1 If a(i) > a(i + 1) Then swap a(i), a(i + 1) shift = i view End If Next i R = shift For i = R To L + 1 Step -1 If a(i - 1) > a(i) < 0 Then swap a(i), a(i - 1) shift = i view End If Next i L = shift Loop End Sub '基本挿入法 Private Sub cmdSounyu_Click() Dim i As Integer Dim j As Integer init view For i = 1 To N - 1 For j = i - 1 To 0 Step -1 If a(j) > a(j + 1) Then swap a(j), a(j + 1) view Else Exit For End If Next j Next i End Sub 'シェルソート Private Sub cmdShell_Click() Dim gap As Integer Dim k As Integer Dim j As Integer Dim i As Integer init view gap = Int(N / 2) Do While gap > 0 For k = 0 To gap - 1 For i = k + gap To N - 1 Step gap For j = i - gap To k Step -gap If a(j) > a(j + gap) Then swap a(j), a(j + gap) view Else Exit For End If Next j Next i Next k gap = Int(gap / 2) Loop End Sub