【Python】Bubble Sortを学びながらPythonの基礎を身につける記事

当ページのリンクには広告が含まれています。
✓目次
Bubble Sortとは
ソートアルゴリズムの一種です。
要素の1番目と2番目を比較し、順番が逆であれば入れ換える。
次に2番目と3番目を比較して入れ換える。
これを最後まで行うと、最後の数だけが最小または最大の数として確定するので、確定していない部分について1つずつ減らしながら繰り返す。
詳しくは以下のWikipediaを参照ください。
本記事では、プログラミングにおけるアルゴリズムの練習として、Bubble Sortアルゴリズムを実装したいと思います。
いきなり実装に入る前に、実装する上で必要なpythonの基礎もまとめていきたいと思います。
Pythonの基礎
Bubble Sortをコーディングするために必要な、基本的なPythonの基礎をまずはまとめていきます。
[Python基礎]関数定義
基本的な関数定義としては以下のようなコードがあります。注意点としては、def say_something()前にsay_something()と書いた場合、”関数定義がされてないよ”とエラーになります。pythonは、コードを上から読み込まれるためです。あと()をちゃんとつけましょう。
| 1 | def say_something(): | 
ちなみに、print(type(say_something))とすると、say_somethingが何者なのかを確認することができます。
| 1 | def say_something(): | 
返り値を返したい場合は、以下のようにreturnを用います。以下の例だと、sにhiが入り、返してくれます。
| 1 | def say_something(): | 
引数を用いれば、何度もif文を返さなくてOKになるので便利です。
| 1 | def what_is_this(color): | 
[Python基礎]関数の引数と返り値の宣言
関数は引数と返り値を明示的に宣言することができます。
| 1 | def add_nums(a: int, b: int) -> int: | 
ここで、引数にあえてstringを入れてみます。
| 1 | def add_nums(a: int, b: int) -> int: | 
結果は、abという文字列を返します。
何を言いたいかというと、関数定義の際に、明示的にa, bにはintを宣言しているにも関わらず、aとbにstringを入れても、pythonはエラーを返してくれません。
この点は気をつけておきましょう。
[Python基礎]関数アノテーション
Python3.0i以降では、関数アノテーションという仕組みが導入されました。
関数の引数や返り値にアノテーション(注釈)となる式を記述することができます。
| 1 | from typing import Union, List | 
あくまでも注釈なので、コードが実行される際に型チェックは行われたりしません。
つまり、アノテーションで指定した型以外の引数を渡してもエラーになりません。
[Python基礎]__name__と__main__
よく「おまじない」としてスルーされがちなコードですね。
pythonで関数を用いたコードを記述する際に、編集しているpythonファイルが他のコードからimportされて実行されないようにif __name__ = '__main__':を用いることが良しとされています。
作成しているコードが、プロジェクトの一部で使われることが想定される場合、関数を用いる場合は、以下のようにif __name__ = '__main__':を記述して関数を指定しましょう。
| 1 | def main(): | 
詳しくは、Pythonのif name == “main“ とは何ですか?への回答 - Python学習チャンネル by PyQを参照ください。
[Python基礎]内包表記
内包表記は、リストの要素を操作した上で、新しいリストを作成するための記法です。
通常、そのような処理はforやwhileによるループを使用しますが、内包表記を用いると、簡潔に記述することができます。内包表記は、以下の形式で記述します。
- 新たなリスト = [ 要素への処理 for 要素 in リスト]
- リスト内の要素を1つ1つ取り出して、要素への処理を実行した上で新しいリストを作成します。
| 1 | a = [1, 2, 3, 4, 5, 6] | 
Bubble Sortのコーディング
まずは、数値のlistを扱いたいので、from typing import Listとしておきます。
丁寧にアノテーションでlistを受け付けて、listを返す関数であるということを明示的に示しておきます。先述したとおり、指定した型に従った変数でなくてもエラーは返しません。
| 1 | from typing import List | 
そして、数値のリストを作成し、bubble_sort()に引数として渡してあげます。
| 1 | from typing import List | 
Bubble Sortの仕組みを考慮し、リストのindexの数を取り出したいので、lenメソッドを使い、indexの数を取り出し、それをprintします。
| 1 | from typing import List | 
len_numbersを用いてループを回したいので、for文使います。
| 1 | from typing import List | 
2つの数字を比較する回数は、今回でいうと6つの数字に対して、5回比較を行うため、len_numbers - 1回行えば良いことがわかります。
さらに、その回数は1回ずつ減っていくことから、len_numbers - 1 -iとすれば良いことがわかると思います。最初iには、0が入り、len_numbersには6が入るので、初期値は5になります。そしてループが回るごとに4, 3, 2, 1、となりますね。
| 1 | from typing import List | 
もう少し大きな数字でもやってみます。内包表記を用いてlist内部で処理を記述します。
| 1 | from typing import List | 
まとめ
本記事では、Bubble Sortというソートアルゴリズムを学びながら、以下のPythonの基礎を学びました。
- 関数定義
- 関数の引数と返り値の宣言
- 関数アノテーション
- __nameと- __main__
- 内包表記
アルゴリズムをより詳しく学びプログラミング力を高めたい方
- 以下の、Udemyのコースがおすすめです。セール時は、1200円で購入可能です。セール時でなくても、講師の方に、Twitterでクーポンコードの発行をお願いすれば、10$(1200円)で受講可能となります。30日間の返金保証もついているので、是非試してみてください。
- 本記事も、以下のコースで学んだ内容をもとに作成しております。

