2021年09月21日 12時00分

第16弾プロジェクト「バブルソート」

ホームプログラミングコラム第16弾プロジェクト「バブルソート」

こんにちは!😊

スーパーブログ

「実際にプロジェクトを動かせる記事」の第16回目となります!

今回はバブルソートというアルゴリズムをSPACEBLOCK(スペースブロック)で表現してみようというプロジェクトになります。

皆さんがSPACEBLOCK(スペースブロック)でプログラミングされる際の参考になればと思います!😆


1TK6b4B6eQsJOXEz4zB31632182797-1632182859.gif


今回のプロジェクト

今回のプロジェクトは8×8LEDパネルを使用しています。


~バブルソート~

バブルソートとは数列やデータ列などを大小揃えて整列させるアルゴリズムの1つです。

端から隣接したデータを比べて、交換という流れを繰り返していく方法です。

  1. 左列から順に、隣り合った2列のLED点灯数を比べる
  2. もしも左側より右側のLED点灯数が小さかった場合、その列達を交換する
  3. もしも左側より右側のLED点灯数が大きかった場合はそのままにしておく
  4. 1~3を繰り返し、交換が起きなかった時点で並び替えが終了しているので、プロジェクトを終了させる

という流れで動作するプロジェクトとなります。

※最初に下の画像のように、縦で1~8つのLEDを点灯させるブロックを入れておいてから動かすプロジェクトとなっています。

image.png


プロジェクトの解説

列でLEDがいくつ点灯しているか調べる関数を作る

image.png

引数に列順番をとる関数を作成します。

LEDが点灯しているかどうかのチェックは、調べたい場所のLEDがカラーコードが同じかどうかで調べています。

左右でLED点灯数を比較する関数を作る

image.png

引数に列順番を2つとる関数を作ります。

①で使った関数を使い、左右でLEDを比較します。

LEDを入れ変えるため、縦の列で消灯する関数を作る

image.png

引数に列をとる関数を作成します。

LEDを入れ替える前に、渡した引数の列のLEDを全て消灯します。

LEDを入れ替えるため、縦の列で点灯し直関数を作る

image.png

引数に点灯する数と列順番をとる関数を作ります。

③で作成した関数で1度LEDを縦で消灯してから渡した点灯する数分、LEDを点灯していきます。

下から点灯したいので、yに8を渡して、だんだん数字を減らしています。

左側の点灯数が右側の点灯数より大きかった場合、入れ替える

image.png

④で作成した関数を利用し、LEDを入れ替えます。

左側の方が小さかった場合は何もしません。

1セットで処理をまとめる

image.png

8×8のLEDを使用している為、1番最初は7回左右で比較していきます。

1セットが終わった時、一番大きい数字(今回は8)が右列に来ているはずなので、比較する回数を1回ずつ減らしていきます。

入れ替えがあったかどうかを調べ、なかった場合プロジェクトを終了する

image.png

左右で入れ替えた時に入れ替えたかどうかを保持するブール値にtrueをセットしています。

image.png

入れ替えが起きなかった場合、ブール値はfalseなのでその場合はループから抜け出します。

同じように整列するアルゴリズムは他にもいろいろあると思いますので、見つけたアルゴリズムを再現して比べてみるのも面白いかもしれません😄

皆さんもぜひSPACEBLOCK(スペースブロック)でプログラミングを楽しんでください!😊


公式ブログ
公式ブログ
official
SPACEBLOCK(スペースブロック)公式ブログです。