初心者がpython3とpygameでソートアルゴリズムを可視化してみる【バブルソート】【インサーションソート】

Pythonでバブルソートと挿入ソートを実装し、Pygameで並べ替えの過程を可視化。隣接交換を繰り返す方法と、適切な位置へ要素を挿入する方法の違いを比較します。

Share
初心者がpython3とpygameでソートアルゴリズムを可視化してみる【バブルソート】【インサーションソート】

バブルソート

前回に引き続いて調子に乗って別のソートアルゴリズムも試してみました。
まぁありがちですが。。。

Gistのソースコードを直接開く

バブルソートは隣り合う要素の値を比較して条件に応じた交換をしてゆき。
最大値(または最小値)を逐次右端(または左端)に寄せていくことによりソートを実現します。
大きい順(または小さい順に)順次値が泡のように浮いていくのでバブルソートと呼ばれます。
詳しいことは、ググるとたくさん載ってるのでこの辺でw

効率については、悪いほうのアルゴリズムです。

とりあえず、pythonだと実装めっちゃ簡単でびっくりしました。
(まぁ、速度はC/C++の方が早いんだろうけど)
何がって、値の交換が

a, b = b, a

で書けるってのがでかいですね。
バブルソートやインサーションソートのようにインデックスベースで入れ替えが起こる処理では、楽できるね。

結果

前回同様、入れ替えの操作をリストに記録して、後で再生してます。

インサーションソート

注目要素の値を、順次適切な位置に挿入することによって、整列を行うアルゴリズムです。
処理が簡単なので、バブルソートのように隣接する要素と比べて値を交換していきますが、適切な挿入位置に値が収まると次のループに移行します。

Gistのソースコードを直接開く

結果

動画を見ると、バブルソートとインサーションソートの違いが判ると思います。

所感

交換していく系のソート2つを実装してみました。
リストの操作や、繰り返しでミスったりいろいろありましたが、pythonの練習にはちょうど良かったかな?
そして、pygameが使いづらい。。。
enchant.jsで遊んでた時はとても楽だったのに笑
くじけずもうちょい遊んでみようかなって思います。

へだば、また!

Read more

自前ゲームエンジンにおける古くて大事なこと:ゲームオブジェクト型エンジン

自前ゲームエンジンにおける古くて大事なこと:ゲームオブジェクト型エンジン

C言語で種類ごとに管理していたゲームオブジェクトを、C++のクラス・継承・仮想関数・ポリモーフィズムによって一括管理する、昔ながらのゲームオブジェクト型エンジンを解説します。古典的な設計だからこそ、ゲームループや寿命管理、ObjectManagerなど、コンシューマータイトルや自前ゲームエンジン開発を目指すなら避けて通れない基礎が詰まっています。