Algo python

【Python】Bubble Sort 泡沫排序|演算法介紹、新手快速入門

基本概念

泡沫排序(Bubble Sort)是一種簡單的排序演算法,它通過反覆交換相鄰元素的位置,使較大的元素逐漸「浮」到數列的右側,而較小的元素逐漸「沉」到數列的左側。其基本概念如下:

步驟:

  1. 從數列的第一個元素開始,逐一比較相鄰的兩個元素。
  2. 如果左邊的元素比右邊的元素大(升序排序),則交換它們的位置。
  3. 重複上述步驟,直到遍歷整個數列。這樣一次遍歷之後,最大的元素將「浮」到數列的最右側。
  4. 接下來,對剩餘的元素(未排序的元素)重複執行步驟1至步驟3,直到整個數列已經排序完成。
  5. 重複以上過程,直到不再需要交換,即數列已經排序完成。

特點:

  • 泡沫排序是一種簡單且容易理解的排序演算法,但效率較低。
  • 它的時間複雜度為O(n^2),其中n是數列中的元素數量。因此,對於大型數列,泡沫排序的效率非常低。
  • 泡沫排序是穩定排序(相等元素的相對位置不會改變),因為只有相鄰的元素進行比較和交換。
  • 通常情況下,泡沫排序不建議用於大型數據集的排序,因為它的效率太低。更高效的排序演算法如快速排序和合併排序更適合處理大型數據。

儘管泡沫排序不是一個高效的排序方法,但它有助於理解排序演算法的基本概念,因此在教育和學習排序演算法時仍然具有價值。在實際應用中,請考慮使用更快速的排序方法。

實際應用

以下是使用 Python 實際應用泡沫排序的範例。我們將對一個數列進行泡沫排序,以升序排序數字。

def bubble_sort(arr):
    n = len(arr)

    for i in range(n):
        swapped = False  # 假設本次遍歷中沒有進行交換
        for j in range(0, n - i - 1):
            # 比較相鄰的元素
            if arr[j] > arr[j + 1]:
                # 如果左邊的元素大於右邊的元素,則交換它們的位置
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
                swapped = True  # 表示進行了交換

        # 如果在本次遍歷中沒有進行任何交換,則數列已經排序完成,提前退出
        if not swapped:
            break

# 測試
my_list = [64, 34, 25, 12, 22, 11, 90]

bubble_sort(my_list)

print("排序後的數列:")
for num in my_list:
    print(num, end=" ")

在這個範例中,我們定義了一個名為 bubble_sort 的函數,它接受一個數列 arr 並執行泡沫排序。在排序過程中,我們使用嵌套的 for 迴圈,外部迴圈用於遍歷數列,內部迴圈用於比較和交換相鄰的元素。如果發生交換,我們將 swapped 標誌設為 True。如果在一次遍歷中沒有發生交換,則表示數列已經排序完成,我們提前退出外部迴圈。

最後,我們輸出排序後的數列,確認泡沫排序的正確性。

其他演算法快速通道:

  1. 【Python】什麼是演算法?
  2. 【Python】Stack(堆疊) 資料結構實作
  3. 【Python】linear search 線性搜尋
  4. 【Python】binary search 二分搜尋
  5. 【Python】Bubble Sort 泡沫排序
  6. 【Python】Selection Sort 選擇排序
  7. 【Python】Single Linked List(單向鏈結串列) 資料結構實作
  8. 【Python】Binary Search Tree (二元搜尋樹) 資料結構實作(1)
  9. 【Python】Binary Search Tree (二元搜尋樹) 資料結構實作(2)


線上學習平台推薦

udemy

我自己最愛用的學習平台是 udemy ,當初會選擇在 udemy 上學習的原因除了課程便宜(當初買的很多課程都300塊左右,是台幣喔台幣!)。

上課時間也可以自己控制(對自律的人來說是一大好處!)

雖然可能有些人會覺得,Youtube上不也很多Tutorials嗎?性質應該差不多吧?而且免費。

雖然看Youtube上也有教學影片,但其實你會發現,這些老師都有另外開課程。

原因也很簡單,只要我們付費購買了他的課程,他就能提供更多的資源來輔助學習,且更有組織的教學過程,甚至有被公司認可的證書。

這就是在免費的youtube上沒辦法做到的。

想知道更多的話,歡迎到【2023】10個使用線上平台學習的好處|學生、工程師、各行各業皆適用 看完整介紹。

推薦入門書籍

精通 Python:運用簡單的套件進行現代運算(第二版)

博客來-精通Python:運用簡單的套件進行現代運算(第二版)

之前開始入坑python時就是用這本打底的(有換封面過)

這本書除了前幾張介紹基本的語法之外

後續幾張開始介紹與python相關的延伸性的功能

非常適合程式設計初學者以及剛要開始學習這個語言的讀者

羅列以下幾點關於本書大綱供大家參考

  • 學習簡單的資料類型、基本數學運算與文字操作 
  • 以Python的內建資料結構處理資料 
  • 探索Python程式碼結構,包括函式的使用
  • 使用模組與套件編寫大型Python程式
  • 深入討論物件、類別與其他物件導向功能
  • 檢視一般檔案、關聯式資料庫與NoSQL的儲存機制 
  • 使用Python建構web用戶端、伺服器、API與服務 
  • 管理系統工作,例如程式、程序與執行緒
  • 瞭解並行處理與網路程式設計的基礎

流暢的 Python:清晰、簡潔、有效的程式設計

博客來-流暢的Python:清晰、簡潔、有效的程式設計

適合已經有Python程式語言基礎的人

這本書更詳細的介紹有關python的用法

讓我們寫的程式可以更加"Pythonic"

建議可以與英文版同時閱讀

以後在查閱stackoverflow文獻的時候能不因語言而產生隔閡

  • Python 資料模型:瞭解特殊方法是讓物件具備一致行為的關鍵
  • 資料結構:充分使用內建的型態,並瞭解 Unicode 時代中,文字 vs. bytes 之間的關係
  • 函式就是物件:見識 Python 函式是一級物件,並瞭解這個事實如何影響熱門的設計模式
  • 物件導向的習慣用法:學習參考、可變性、介面、運算子多載與多重繼承,並建構類別
  • 控制流程:藉由 concurrent.futures 與 asyncio 套件,來充分活用情境管理器、產生器、協同程序與並行
  • 中繼編程:瞭解特性、屬性描述器、類別修飾器與中繼類別的工作原理

演算法圖鑑


直觀理解,從基礎開始學習,全圖像化step by step,讓不懂程式的人也能利用圖形了解各種演算法的特質跟運作.

雖然內容並沒有程式實作

但內容演算法流程圖片非常精美

非常適合用來教學或以圖像的方式了解演算法的運作!


Python 自動化的樂趣:搞定重複瑣碎&單調無聊的工作(第二版)

Python 自動化的樂趣|搞定重複瑣碎& 單調無聊的工作(中文版) (Automate the Boring Stuff with Python:  Practical Programming for Total Beginners) | 天瓏網路書店

如果想使用自動化來增強工作流程效率,大推本書

之前這本書只有英文版

在博客來等了1個月還是沒等到

沒想到在2020/08/28 出了中文版

二話不說馬上看看人家都是怎麼用python來完成例行公事的

除了運用Python寫出程式,在幾分鐘內搞定人工手動處理需要花費數小時的工作。

探索Python豐富的模組程式庫來完成某些特定工作

例如從網站上抓取資料、讀取PDF和Word文件,以及自動化執行滑鼠點按和鍵盤輸入的工作。

 ‧在一個或多個檔案中搜尋文字
  ‧建立、更新、搬移和重新命名檔案和資料夾
  ‧搜尋網頁和下載網路上的圖文內容
  ‧處理PDF檔的分割與合併,加入浮水印和加上密碼等作業
  ‧傳送Email和簡訊
  ‧填寫線上表單

在〈【Python】Bubble Sort 泡沫排序|演算法介紹、新手快速入門〉中有 2 則留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *