目次

ソートアルゴリズム

(2016/8/10)

アルゴリズムの定番である「データの並び替え(ソートアルゴリズム)」です。 今回は入力と出力の配列を分けることで、CSアンプラグド風に「1個の配列で処理することにこだわらない」ようにしてみました。

CSアンプラグドのソーティングアルゴリズム

選択ソート

 //in=配列!5 3 7 2 8 6 1 4 作る。
 in=配列!作る。「in!(乱数(50))書く」!20 繰り返す。
 ラベル!(in)作る。
 out=配列!作る。
 「
   min=in!1 読む。pos=1。
   「|n|
     v=in!(n)読む。
     「v<min」!なら「min=v。pos=n」実行。
   」!(in!要素数?)繰り返す。
   out!(min)書く。in!(pos)位置で消す。
 」!(in!要素数?)繰り返す。
 ラベル!(out)作る 次の行。

挿入ソート

 //in=配列!5 3 7 2 8 6 1 4 作る。
 in=配列!作る。「in!(乱数(50))書く」!20 繰り返す。
 ラベル!(in)作る。
 out=配列!作る。
 「|i|
   v1=in!(i)読む。
   n=0。
   「|j|
     v2=out!(j)読む。
     「v1>v2」!なら「n=j」実行。
   」!(out!要素数?)繰り返す。
   out!(n+1)(v1)挿入。
 」!(in!要素数?)繰り返す。
 ラベル!(out)作る 次の行。

クイックソート

 quick=「|a ; ret n p left right v|
   ret=a。
   n=a!要素数?。
   「n>1」!なら「
     p=a!(n) 読む。
     left=配列!作る。
     right=配列!作る。
     「|i|
       v=a!(i)読む。
       「v<p」!なら「left!(v)書く」そうでなければ「right!(v)書く」実行。
     」!(n-1)繰り返す。
     ret=配列!作る(!(left)quick)(p)(!(right)quick)連結。
   」実行。
   ret。
 」。
 
 //in=配列!5 3 7 2 8 6 1 4 作る。
 in=配列!作る。「in!(乱数(50))書く」!20 繰り返す。
 ラベル!(in)作る。
 out=!(in)quick。
 ラベル!(out)作る 次の行。