ソートアルゴリズム(1):詳細なバブルソート

序文:私は最近転職しました。少し大きい工場へのインタビューで、アルゴリズムとデータ構造の知識について尋ねられます。自分で要約する時間があります。要約が適切でない場合は、上司が私を訂正してくれることを願っています。 。

エピソード記憶:実際、バブルソートの学校は腐っていますが、しばらくしてロジックの実装を忘れることがあるのはなぜですか?あまり使われていませんし、正直なところ、仕事ではあまり使われていませんが、シーンメモリーを使って心に刻むことができます。生活の常識があれば、しっかりと覚えて、魚の唾を吐く泡のシーンでは、魚が水中で吐き出す泡は、吐き出すだけで非常に小さくなります。泡が上がると、泡はどんどん大きくなり、最終的には表面に出て壊れます。このシーンは非常に似ています。バブルソートは小さなものから大きなものへのソートを考えており、バブルを壊すプロセスは一種の旅行と見なされます。

ロジックの実装:メモリ方式について説明した後、ロジックは実際には非常に明確です。隣接する値を順番に比較し、最大または最小を最後に移動します。

コードの実装:
順方向の並べ替え:

def bubble_sort(list):
    list_len = len(list)
    for i in range(0, list_len):
        print("第%d趟" % (i+1))
        for j in range(1, list_len):
            if list[j-1] < list[j]:
                list[j-1], list[j] = list[j], list[j-1]
        print(list)


if __name__ == '__main__':
    my_list = [7, 2, 0, 1, 5, 6, 8, 3, 9, 4]
    bubble_sort(my_list)


运行结果:
第1[2, 0, 1, 5, 6, 7, 3, 8, 4, 9]2[0, 1, 2, 5, 6, 3, 7, 4, 8, 9]3[0, 1, 2, 5, 3, 6, 4, 7, 8, 9]4[0, 1, 2, 3, 5, 4, 6, 7, 8, 9]5[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]6[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]7[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]8[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]9[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]10[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

逆ソート:

def bubble_sort(list):
    list_len = len(list)
    for i in range(0, list_len):
        print("第%d趟" % (i+1))
        for j in range(1, list_len):
            if list[j-1] < list[j]:
                list[j-1], list[j] = list[j], list[j-1]
        print(list)


if __name__ == '__main__':
    my_list = [7, 2, 0, 1, 5, 6, 8, 3, 9, 4]
    bubble_sort(my_list)
 
 
运行结果:
第1[7, 2, 1, 5, 6, 8, 3, 9, 4, 0]2[7, 2, 5, 6, 8, 3, 9, 4, 1, 0]3[7, 5, 6, 8, 3, 9, 4, 2, 1, 0]4[7, 6, 8, 5, 9, 4, 3, 2, 1, 0]5[7, 8, 6, 9, 5, 4, 3, 2, 1, 0]6[8, 7, 9, 6, 5, 4, 3, 2, 1, 0]7[8, 9, 7, 6, 5, 4, 3, 2, 1, 0]8[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]9[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]10[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

バブルソートの概要:
最適なアルゴリズムはなく、最適なアルゴリズムのみです。アルゴリズムの品質は通常、時間の複雑さ、空間の複雑さ、およびアルゴリズムの安定性に関連しています。

時間計算量:時間計算量の尺度は、毎回位置を比較および交換するのにかかる時間の合成です。つまり、ソートを完了するのにかかる時間の合計は時間計算量と呼ばれます。計算標準は1サイクルです(何度でも)nと表記し、その差をlog nとしてバイナリツリー構造に表すことができれば、バブルソートの時間計算量はO(n ^ 2)であることがわかります。

スペースの複雑さ:スペースの複雑さの尺度は、並べ替えのプロセス全体で並べ替えを完了するために適用される新しいストレージスペースがあるかどうかです。そうであれば、より多くのスペースが適用される場合、アルゴリズムのスペースの複雑さは次のようになります。複雑については、バブルソートはプロセス内のストレージスペースには適用されないため、バブルソートのスペースの複雑さは小さいと考えられます(それ自体を除く)

安定性:つまり、元のシーケンスでは、list [i] = list [j]であり、list[i]はlist[j]の前にあり、ソートされたシーケンスでは、list[i]はまだlist[j]の前にあります。そして、このソートアルゴリズムは安定していると言われ、そうでなければ不安定と呼ばれ、バブルソートは安定していると考えられます。安定性の比較:ヒープソート、クイックソート、ヒルソート、選択ソートは不安定なソートアルゴリズム、バブルソート、挿入ソート、とマージソートは安定したソートアルゴリズムです。

おすすめ

転載: blog.csdn.net/xiaoxin_OK/article/details/115772540