モジュール詳細:並び替え

どうせ手動で並べ替えるなら、ソートアルゴリズムを実装する意味なくない?

  • モジュールには、ディスプレーが1つとボタンが5つある。ディスプレーが示しているアルゴリズムを上から参照する。
  • 位置は、上下のずれを無視して左から右に数える。 例えば、一番目は左下を指す。
  • すべての位置が値の昇順に並ぶと解除され、アルゴリズムに逆らうとミスが記録される。
バブル(Bubble)ソート
以下の条件に該当すれば、二つを入れ替える。
1番目のラベルは2番目のラベルより大きい。
2番目のラベルは3番目のラベルより大きい。
3番目のラベルは4番目のラベルより大きい。
4番目のラベルは5番目のラベルより大きい。
バブルソートを繰り返す。
スロー(Slow)ソート
以下の条件に該当すれば、二つを入れ替える。
1番目のラベルは2番目のラベルより大きい。
2番目のラベルは3番目のラベルより大きい。
1番目のラベルは2番目のラベルより大きい。
4番目のラベルは5番目のラベルより大きい。
3番目のラベルは5番目のラベルより大きい。
1番目のラベルは2番目のラベルより大きい。
3番目のラベルは4番目のラベルより大きい。
2番目のラベルは4番目のラベルより大きい。
スローソートを繰り返す。
サイクル(Cycle)ソート
確認すべき条件 該当する場合の処理
1番目は最も小さい値ではない? 1番目にあるボタンを、そのボタンが本来あるべき位置のボタンと入れ替える。サイクルソートを繰り返す。
2番目は2番目に小さい値ではない? 2番目にあるボタンを、そのボタンが本来あるべき位置のボタンと入れ替える。サイクルソートを繰り返す。
3番目は3番目に小さい値ではない? 3番目にあるボタンを、そのボタンが本来あるべき位置のボタンと入れ替える。サイクルソートを繰り返す
4番目にあるボタンを、そのボタンが本来あるべき位置のボタンと入れ替える。
マージ(Merge)ソート
以下の条件に該当すれば、二つを入れ替える。
1番目のラベルは2番目のラベルより大きい。
4番目のラベルは5番目のラベルより大きい。
シリアルナンバーの最初の数字が奇数 それ以外
1番目のボタンを1~3番目のラベルのうち
最も小さいラベルのボタンと入れ替える
5番目のボタンを3~5番目のラベルのうち
最も大きいラベルのボタンと入れ替える
2番目のラベルが3番目のラベルより大きい
場合、二つを入れ替える
3番目のラベルが4番目のラベルより大きい
場合、二つを入れ替える
選択ソートを参照する。
挿入(Insertion)ソート
確認すべき条件 該当する場合の処理
1番目のラベルは2番目のラベルより大きい。 二つを入れ替える
2番目のラベルは3番目のラベルより大きい。 二つを入れ替え、一つ上の条件を確認する
3番目のラベルは4番目のラベルより大きい。 二つを入れ替え、一つ上の条件を確認する
4番目のラベルは5番目のラベルより大きい。 二つを入れ替え、一つ上の条件を確認する
ヒープ(Heap)ソート
ヒープソートが繰り返された回数を記録すること。
確認すべき条件 該当する場合、以下の条件に
該当すれば二つを入れ替える。
これが1回目または2回目のヒープソートである 2番目のラベルは4番目のラベルより小さい。
これが1回目のヒープソートである 2番目のラベルは5番目のラベルより小さい。
これが1回目または2回目または3回目または4回目のヒープソートである 1番目のラベルは2番目のラベルより小さい。
これが1回目または2回目または3回目のヒープソートである 1番目のラベルは3番目のラベルより小さい。
これが1回目または2回目のヒープソートである 2番目のラベルは4番目のラベルより小さい。
これが1回目のヒープソートである 2番目のラベルは5番目のラベルより小さい。
1番目のボタンとまだ入れ替えていないボタンのうち最も後ろにあるボタンを入れ替える。ヒープソートを繰り返す。
基数(Radix)ソート
条件に該当する数字が複数ある場合、左端の数字がより小さい方を採用する。
以下の条件に該当すれば二つを入れ替える。
右端の桁の数字が最も小さい数字と1番目にあるボタン。
右端の桁の数字が2番目に小さい数字と2番目にあるボタン。
右端の桁の数字が3番目に小さい数字と3番目にあるボタン。
右端の桁の数字が4番目に小さい数字と4番目にあるボタン。
左端の桁の数字が最も小さい数字と1番目にあるボタン。
左端の桁の数字が2番目に小さい数字と2番目にあるボタン。
左端の桁の数字が3番目に小さい数字と3番目にあるボタン。
左端の桁の数字が4番目に小さい数字と4番目にあるボタン。
ここに到達した場合、残りのラベルを任意の位置に移動させる。
コム(Comb)ソート
開始時、距離は3とする。6/7/...番目を参照するステップは無視すること。
以下の条件に該当すれば、二つを入れ替える。
1番目のラベルは(1 + 距離)番目のラベルより大きい。
2番目のラベルは(2 + 距離)番目のラベルより大きい。
3番目のラベルは(3 + 距離)番目のラベルより大きい。
4番目のラベルは(4 + 距離)番目のラベルより大きい。
距離を1減らす。コムソートを繰り返す。
クイック(Quick)ソート
開始時、軸 = 1, 参照 = 5に設定する。
確認すべき条件 該当する場合の処理
番目と参照番目同士をまだ並び替えていない? 番目のボタンと参照番目のボタンを入れ替え、2つの値も入れ替える。
二つは同じ値?そうでなければ、参照と差が1であるか? = まだ並び替えていない位置のうち最も左の位置の数字にする。
参照 = まだ並び替えていない位置のうち最も右の位置の数字にする。
クイックソートを繰り返す。
シェル(Shell)ソート
以下の条件に該当すれば、二つを入れ替える。
1番目のラベルは3番目のラベルより大きい。
2番目のラベルは4番目のラベルより大きい。
3番目のラベルは5番目のラベルより大きい。
1番目のラベルは3番目のラベルより大きい。
バブルソートを参照する。
選択(Selection)ソート
最も小さいラベルと1番目のボタンを入れ替える。
2番目に小さいラベルと2番目のボタンを入れ替える。
3番目に小さいラベルと3番目のボタンを入れ替える。
4番目のボタンと5番目のボタンを入れ替える。
ファイブ(Five)ソート
3番目に大きい数字と3番目のボタンを入れ替える。
確認すべき条件 該当する場合の処理
1番目のラベルは
3番目に大きい数字より大きい?
1番目のボタンと、
3番目以降のボタンのうち1番目と3番目のボタンより小さい数字の中で最も左にボタンにあるボタンを入れ替える。
2番目のラベルは
3番目に大きい数字より大きい?
2番目のボタンと、
3番目以降のボタンのうち2番目と3番目のボタンより小さい数字の中で最も左にボタンにあるボタンを入れ替える。
以下の条件に該当すれば、二つを入れ替える。
1番目のラベルは2番目のボタンより大きい。
4番目のラベルは5番目のボタンより大きい。
カクテル・シェーカー(Cocktail)ソート
以下の条件に該当すれば、二つを入れ替える。
以下の手順を上から繰り返す。
1番目のラベルは2番目のラベルより大きい。
2番目のラベルは3番目のラベルより大きい。
3番目のラベルは4番目のラベルより大きい。
4番目のラベルは5番目のラベルより大きい。
以上の手順を下から繰り返す。
奇偶転置(Odd-Even)ソート
以下の条件に該当すれば、二つを入れ替える。
1番目のラベルは2番目のラベルより大きい。
3番目のラベルは4番目のラベルより大きい。
2番目のラベルは3番目のラベルより大きい。
4番目のラベルは5番目のラベルより大きい。
奇偶転置ソートを繰り返す。
ボゴ(Bogo)ソート
任意の入れ替えを行ってよい。ただし、250回の入れ替え制限を超えるとミスが記録される。処理担当者側からはラベルを見ることはできないが、解除は可能である。
いずれかのボタンを繰り返しクリックし続けることで、元の状態に戻すことができる。
ストゥージ(Stooge)ソート
ここに到達したのは2回目?そうであれば、N = 2である。そうでなければ、N = 1である。
サブ配列のN番目の項目を参照する。
サブ配列のN + 1番目の項目を参照する。
サブ配列のN番目の項目を参照する。
ストゥージソートを繰り返す。
サブ配列
以下の条件に該当すれば、二つを入れ替える。
N番目のラベルはN+1番目のラベルより大きい。
N+1番目のラベルはN+2番目のラベルより大きい。
N番目のラベルはN+1番目のラベルより大きい。
ストゥージソートの次の項目を見る。