見出し画像

VSCode×Pythonでアルゴリズムを動かそう!バブルソートのアニメーションを作成

 本記事では、無料開発環境のVScode とPythonでアルゴリズムを動かすアニメーションを作成する方法を解説します。
 探索アルゴリズムと整列アルゴリズムを学んだので、これらのアルゴリズムによる配列データの動きを可視化したい!と考えました。
 簡単に実装できますので、本記事を参考にして試してください。

用意する物
標準機能のhp ノートパソコン(10万円未満)
VSCode をインストール
VSCode 内でPythonをインストール
VSCode内でPythonのライブラリ「matplotlib」をインストール
ChatGPT

VSCodeのダウンロードページ

ChatGPTの支援でアルゴリズムのアニメーションを作る方法

  1. ChatGPTに、VSCode、Pythonで〇〇アルゴリズムのアニメーションを作成したい、などと入力してコーディングしてもらう。

  2. 作成されたコードをVSCodeの新規ファイルにコピペする。

  3. 動作確認して、エラーが出たら、エラーメッセージをChatGPTにコピペして修正コードを出力してもらう。

  4. 2と3の繰返しで、必要に応じてライブラリなどをコマンドプロンプト等でインストールする。

交換法(バブルソート)アルゴリズムのアニメーション
.GIF形式で出力・保存機能を追記
data =[8, 20, 10, 2, 4] の配列データを集成すれば、アニメーションの結果も変化します。

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np

# 初期データ
data = [8, 20, 10, 2, 4]
data_history = [data.copy()]

# バブルソートの過程を記録
def bubble_sort(data):
    arr = data.copy()
    n = len(arr)
    for i in range(n):
        swapped = False
        for j in range(n - i - 1):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
                swapped = True
                data_history.append(arr.copy())  # 各ステップを保存
        if not swapped:
            break

bubble_sort(data)

# アニメーションの設定
fig, ax = plt.subplots()
bar_rects = ax.bar(range(len(data)), data_history[0])

def update(frame):
    for rect, value in zip(bar_rects, data_history[frame]):
        rect.set_height(value)
    return bar_rects

ani = animation.FuncAnimation(fig, update, frames=len(data_history), repeat=False)

# GIFとして保存
ani.save("bubble_sort.gif", writer="pillow", fps=1)

plt.show()


図1. VSCode ×Pythonでバブルソートアルゴリズムのアニメーションを作成
(ChatGPTが作成したコードをコピペ)

バブルソートアルゴリズムのアニメーション動画(.GIF)

図2. バブルソートアルゴリズムのアニメーション(静止画)
動画(.GIF)は、棒グラフが動き、昇順に整列される動きが確認できます。

感想

  • 他のアルゴリズムによる配列データの動きもアニメーションで確認してみたいです。

  • 実際に動きが見れると、アルゴリズムの動きの理解が深まります。また、作成して動きが見れるのは楽しいですよ!

  • ChatGPTを巧く使えば、プログラミング経験が浅くても、数分で実装できます。質問の仕方のコツを掴めば、簡単です。

  • 基本情報技術者試験科目Bのアルゴリズム問題も、Pythonでアニメーション化したらより理解が深まりそうです。

以上です。

いいなと思ったら応援しよう!