サンプルプログラム1 クイックソート
クイックソートです。$d[0]~$d[9]の10個のデータを小さいものから順に並べ替えます。
dim $d[10] dim $d1[10] dim $d2[10] #---------------- $d[0] = 5 $d[1] = 2 $d[2] = 1 $d[3] = 4 $d[4] = 6 $d[5] = 4 $d[6] = 8 $d[7] = 9 $d[8] = 6 $d[9] = 4 #---------------- a = 0 m = 10 #---------------- qsort(a, m) # for i = a to a + m -1 print $d[i] end exit #---------------- func qsort(a, m) if m <= 1 return end n = divide(a, m) if n > 1 qsort(a, n) end if m - n - 1 > 1 qsort(a + n + 1, m - n - 1) end end #---------------- #m個のデータ #$d[a], $d[a + 1], ……, $d[a + m - 1] #を先頭の要素 $d[a]を基準にして小さいものと、 #そうでないものに分けていったん $d1[]、$d2[]に入れる。 #$d1[]に入ったデータ数を返す。 #$d[a]は$d2[]の先頭に入る。 #$d[] は$d1[], $d2[] をつなげた配列となる。 #例: 521464 → 214456 #---------------- func divide(a, m) if m <= 1 return end x = $d[a] p1 = 0 p2 = 1 $d2[0] = $d[a] for t = a + 1 to a + m - 1 if x <= $d[t] $d2[p2] = $d[t] p2 += 1 else $d1[p1] = $d[t] p1 += 1 end end for i = 0 to p1 - 1 $d[a + i] = $d1[i] end for i = 0 to p2 - 1 $d[a + p1 + i] = $d2[i] end #$d1[]に入った要素の個数を返す return p1 end
サンプルプログラム2 バブルソート
バブルソートです。$d[0]~$d[9]の10個のデータを小さい順に並べ替えます。内側のforループでは隣り合うデータを次々に確認し、大小順を正しくします。これだけだと例えば一番小さいデータが$d[9]に入っていたときなど、これが$d[8]に移って終わってしまいます。だからこのループを9回繰り返せばよいわけです。具体的にはforループを2重にします。
dim $d[10] #---------------- $d[0] = 5 $d[1] = 2 $d[2] = 1 $d[3] = 4 $d[4] = 6 $d[5] = 4 $d[6] = 8 $d[7] = 9 $d[8] = 6 $d[9] = 4 #---------------- for i = 0 to 8 for j = 0 to 8 if $d[j] > $d[j + 1] x = $d[j] $d[j] = $d[j + 1] $d[j + 1] = x end end end for i = 0 to 9 print $d[i] end exit
サンプルプログラム3
import sys import os