Day 97バブルソートの実装と理解
Pythonコード
1def bubble_sort(nums):2 # バブルソートの実装3 for i in range(len(nums)):4 for j in range(len(nums) - 1):5 if nums[j] > nums[j + 1]:6 nums[j], nums[j + 1] = nums[j + 1], nums[j]7 return nums8 9def main():10 try:11 num_count = int(input('数列の要素数を入力してください:'))12 nums = []13 for i in range(num_count):14 num = int(input(f'数列の{i+1}番目の要素を入力してください:'))15 nums.append(num)16 print('ソート前:', nums)17 sorted_nums = bubble_sort(nums)18 print('ソート後:', sorted_nums)19 except ValueError:20 print('数値以外の入力がありました。再度実行してください。')21 22if __name__ == '__main__':23 main()
解説
- 行1〜3: バブルソートの実装を定義します。バブルソートは、隣接する要素を比較して順序を入れ替えることで、数列を昇順に並べるアルゴリズムです。ここでは、関数`bubble_sort`でこのアルゴリズムを実装しています。len()は要素数(長さ)を返す関数です。
- 行4〜7: バブルソートの内部で、数列の各要素を比較して必要に応じて入れ替える処理を実行します。`if nums[j] > nums[j + 1]`で隣接する要素を比較し、条件が真の場合はそれらの要素を入れ替えます。
- 行9〜15: `main`関数では、ユーザーから数列の要素数と各要素の値を入力してもらいます。入力された値を数列`nums`に格納し、バブルソートを実行してソートされた数列を出力します。range()は連続した整数を順番に取り出すために使います。
- 行16〜18: ソート前とソート後の数列を表示します。print()は画面に文字や値を表示する関数です。
- 行19〜20: 入力処理で数値以外の値が入力された場合に、`ValueError`例外が発生します。この例外を捕捉して、ユーザーに再度実行するよう促します。
次に試してみよう
- バブルソートのアルゴリズムを理解したので、選択ソートや挿入ソートなどの他のソートアルゴリズムを実装してみましょう。
- バブルソートの時間計算量を分析し、どのような場合に最も効率が良いのか考えてみましょう。
- バブルソートを用いて、実際のデータセットをソートしてみましょう。