Pythonでバブルソートアルゴリズムを作ろうの巻
Pythonでバブルソートアルゴリズムを作ろうの巻
こんばんは、葛の葉です。最近、電車乗ってるときにスマートフォンでPythonのプログラミングの勉強してます。やらない日もあるけど……ちなみにiPhone7を使用しています。
なお、使っているアプリはPythonista3
です。
このアプリはPythonを実行することが出来るし、オリジナルな自分用アプリを作ることが出来ます。pip
が使えなかったりgit
が使えなかったりですが、iPhoneでカーソル移動が出来たりと結構かゆいところに手が届くアプリです。
アルゴリズムをやってみようって思ったんだ
アルゴリズムが出来ないのはよろしくないんだと、どっかで聞きました。どこかは忘れましたが、とにかくプログラマーがアルゴリズムを実装出来ない
はよくないんだと。
どういうアルゴリズムが実装出来ないのがダメなのかがよくわからんけれども、とりあえずソートアルゴリズムは出来たほうがよかろうということで、とりあえず作ってみることにしました。
バブルソートアルゴリズムについて
バブルソートアリゴリズムについては、はてなキーワードにも載ってますね。
ソートとは並び替えのことで、ソートアルゴリズムは並び替えを実施するための仕組みです。
バブルソートアルゴリズムはリストの要素を読んでいき、その要素とその隣の要素のほうが大きい(または小さい)場合、値を取り換えるというものです。
それを繰り返していくことで降順、昇順にソートすることが出来るようです。
環境
Pythonista Ver3.2 Python Ver3.6.1
私のプログラミング例
私はこんな感じにプログラミングしてみました。
def bubble_sort(arrs): if type(arrs) is list: flag = True ...(1) while flag == True: ...(1) flag = False ...(1) for i in range(len(arrs)): if i == len(arrs) - 1: ...(2) pass elif arrs[i] > arrs[i + 1]: arrs[i], arrs[i + 1] = arrs[i + 1], arrs[i] ...(3) flag = True else: pass return arrs else: return 'list de ok' ...(4) test = [1, 2, 5, 8, 6, 7, 3, 4, 9] print(bubble_sort(test))
なんか、もっといいやり方があるような気がするけど、それは君自身で確かめてみてくれ!!!!
(1) ... フラグを作っています。隣の要素をみて、値を交換した時にこのフラグがTrue
になり、繰り返しが再び始まります。逆に一回も交換しなかった場合、フラグはFalseのままとなりますので、繰り返しが止まります。
(2) ... len(arrs) -1
はlen(arrs)が要素数+1で出力されているため、-1しています。
(3) ... arrs[i], arrs[i + 1] = arrs[i + 1], arrs[i]
は Python特有の値の交換方法です
tmp = a
a = b
b = tmp
ということをやらなくていいのがpythonのいいところですね。(a + b) = (b + a)
のほうが正しいみたいな話はどっかで聞いた気がする。
(4) ... 'list de ok'
は引数がリスト型でない場合怒られるようにしています。
他のアルゴリズムもやってみたいです。
このアルゴリズムは勉強になるよ~ってのがあったら教えてください~