Kuzunoha-NEのブログ

プログラミングなどの勉強をしてます

Pythonでバブルソートアルゴリズムを作ろうの巻

Pythonバブルソートアルゴリズムを作ろうの巻

こんばんは、葛の葉です。最近、電車乗ってるときにスマートフォンPythonのプログラミングの勉強してます。やらない日もあるけど……ちなみにiPhone7を使用しています。

なお、使っているアプリはPythonista3です。

Pythonista for iOS

Pythonista 3

Pythonista 3

  • omz:software
  • Productivity
  • $9.99

f:id:Kuzunoha-NE:20181012191103p:plain

このアプリはPythonを実行することが出来るし、オリジナルな自分用アプリを作ることが出来ます。pipが使えなかったりgitが使えなかったりですが、iPhoneでカーソル移動が出来たりと結構かゆいところに手が届くアプリです。

アルゴリズムをやってみようって思ったんだ

アルゴリズムが出来ないのはよろしくないんだと、どっかで聞きました。どこかは忘れましたが、とにかくプログラマーがアルゴリズムを実装出来ないはよくないんだと。

どういうアルゴリズムが実装出来ないのがダメなのかがよくわからんけれども、とりあえずソートアルゴリズムは出来たほうがよかろうということで、とりあえず作ってみることにしました。

バブルソートアルゴリズムについて

バブルソートアリゴリズムについては、はてなキーワードにも載ってますね。

d.hatena.ne.jp

ソートとは並び替えのことで、ソートアルゴリズムは並び替えを実施するための仕組みです。

バブルソートアルゴリズムはリストの要素を読んでいき、その要素とその隣の要素のほうが大きい(または小さい)場合、値を取り換えるというものです。

それを繰り返していくことで降順、昇順にソートすることが出来るようです。

環境

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'は引数がリスト型でない場合怒られるようにしています。

他のアルゴリズムもやってみたいです。

このアルゴリズムは勉強になるよ~ってのがあったら教えてください~