Python(バブルソート2)

def my_sort(xs):
    tmplist = xs.copy()
    n=len(tmplist)
    print(f"n={n}")
    for i in range(n-1):
        # フラグ管理し、入れ替えが起こらない=ソートできているので処理を抜ける
        flag=False
        for j in range(1,n-i):
            print(f"i={i},j={j}")
            print(f"tmplist[j-1]={tmplist[j-1]},tmplist[j]={tmplist[j]}")
            if tmplist[j-1]>tmplist[j]:
                tmplist[j-1],tmplist[j]=tmplist[j],tmplist[j-1]
                flag = True
                print("入れ替えました",tmplist)
        if not flag:
            print("ソート済みです")
            break
    return tmplist

def my_sort2(xs):
    tmplist = xs.copy()
    n=len(tmplist)
    print(f"n={n}")
    for i in range(n-1):
        for j in range(n-i-1):
            print(f"i={i},j={j}")
            print(f"tmplist[j]={tmplist[j]},tmplist[j+1]={tmplist[j+1]}")
            if tmplist[j]>tmplist[j+1]:
                tmplist[j],tmplist[j+1]=tmplist[j+1],tmplist[j]
                print("入れ替えました",tmplist)
    return tmplist            
            

print(my_sort([1,3,-8,5,7,9,55,474]))

二重ループで要素の大小関係を調べて入れ替えを行っています。ループの条件設定で二パターンの関数を定義。どちらも正しくソートを行うことができます。

また、ソート処理をより効率化するためにフラグを利用し、ソートが完了している時点で処理を終わらせて無駄なループ処理が行われないようにしています。

今回のポイントは二重ループのようなネストされた構造リストを活用した要素の入れ替えです。
タプルやストリングでは中の要素をそのまま書き換えることはできないので注意!タプルやストリングを用いる場合には一度要素をリスト化して書き換えを行うようにしましょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Unity

前の記事

Unity(Toto’s Toy Box)
Python

次の記事

Python(tkinter)