Python入門小專案-氣泡排序詳解

大眼程式猿發表於2022-04-08

什麼是氣泡排序

氣泡排序的英文Bubble Sort,是一種最基礎的交換排序。

大家一定都喝過汽水,汽水中常常有許多小小的氣泡,嘩啦嘩啦飄到上面來。這是因為組成小氣泡的二氧化碳比水要輕,所以小氣泡可以一點一點向上浮動。

而我們的氣泡排序之所以叫做氣泡排序,正是因為這種排序演算法的每一個元素都可以像小氣泡一樣,根據自身大小,一點一點向著陣列的一側移動。

演算法描述

氣泡排序的基本思想就是:從無序序列頭部開始,進行兩兩比較,根據大小交換位置,直到最後將最大的資料元素交換到了無序佇列的隊尾,從而成為有序序列的一部分;下一次繼續這個過程,直到所有資料元素都排好序。

演算法的核心在於每次通過兩兩比較交換位置,選出剩餘無序序列裡最大的資料元素放到隊尾。

程式碼實現

  • 比較相鄰的元素,如果第一個比第二個大(升序),就交換他們兩個;
  • 對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對;
  • 針對所有的元素重複以上的步驟,除了最後已經選出的元素;
  • 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
copy
# _*_ coding:utf-8 _*_

# 氣泡排序
def bubble_sort(list):

    n = len(list)
    print(f"列表的總長度為:{n}")

    for i in range(n - 1):

        print('-' * 20)
        print(f"當前i為:{i}")
        count = 0
        print('*' * 20)

        for j in range(0, n-1-i):

            print(f"當前j為:{j}")
            print(list)

            # 讓列表的前一位與後一位進行對比,如果前一位大於後一位,則交換兩者的位置,當最大的以為移至佇列尾部時停止比較
            if list[j] > list[j+1]:

                list[j], list[j+1] = list[j+1], list[j]
                count += 1
                print(f"當前count為:{count}")

        if 0 == count:
            break

if __name__ == '__main__':
    list = [56, 12, 1, 8, 254, 456, 10, 100, 34, 56, 7, 23, 234, -57]
    print(f"原列表為:{list}")
    bubble_sort(list)
    print('^' * 60)
    print(f"新列表為:{list}")

最終結果為:

1
copy
新列表為:[-57, 1, 7, 8, 10, 12, 23, 34, 56, 56, 100, 234, 254, 456]

除開氣泡排序之外,我也整理了一份學習資料,主要包含爬蟲入門(爬蟲工作流程  http工作流程)、逆向工程、逆向演算法、非同步爬蟲、安卓逆向這幾個板塊,適合Python入門的朋友學習,都是精華,有需要的話可以新增名片領取。

相關文章