目錄
基本概念
泡沫排序(Bubble Sort)是一種簡單的排序演算法,它通過反覆交換相鄰元素的位置,使較大的元素逐漸「浮」到數列的右側,而較小的元素逐漸「沉」到數列的左側。其基本概念如下:
步驟:
- 從數列的第一個元素開始,逐一比較相鄰的兩個元素。
- 如果左邊的元素比右邊的元素大(升序排序),則交換它們的位置。
- 重複上述步驟,直到遍歷整個數列。這樣一次遍歷之後,最大的元素將「浮」到數列的最右側。
- 接下來,對剩餘的元素(未排序的元素)重複執行步驟1至步驟3,直到整個數列已經排序完成。
- 重複以上過程,直到不再需要交換,即數列已經排序完成。
特點:
- 泡沫排序是一種簡單且容易理解的排序演算法,但效率較低。
- 它的時間複雜度為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
。如果在一次遍歷中沒有發生交換,則表示數列已經排序完成,我們提前退出外部迴圈。
最後,我們輸出排序後的數列,確認泡沫排序的正確性。
其他演算法快速通道:
- 【Python】什麼是演算法?
- 【Python】Stack(堆疊) 資料結構實作
- 【Python】linear search 線性搜尋
- 【Python】binary search 二分搜尋
- 【Python】Bubble Sort 泡沫排序
- 【Python】Selection Sort 選擇排序
- 【Python】Single Linked List(單向鏈結串列) 資料結構實作
- 【Python】Binary Search Tree (二元搜尋樹) 資料結構實作(1)
- 【Python】Binary Search Tree (二元搜尋樹) 資料結構實作(2)
線上學習平台推薦
udemy
我自己最愛用的學習平台是 udemy ,當初會選擇在 udemy 上學習的原因除了課程便宜(當初買的很多課程都300塊左右,是台幣喔台幣!)。
上課時間也可以自己控制(對自律的人來說是一大好處!)
雖然可能有些人會覺得,Youtube上不也很多Tutorials嗎?性質應該差不多吧?而且免費。
雖然看Youtube上也有教學影片,但其實你會發現,這些老師都有另外開課程。
原因也很簡單,只要我們付費購買了他的課程,他就能提供更多的資源來輔助學習,且更有組織的教學過程,甚至有被公司認可的證書。
這就是在免費的youtube上沒辦法做到的。
想知道更多的話,歡迎到【2023】10個使用線上平台學習的好處|學生、工程師、各行各業皆適用 看完整介紹。
推薦入門書籍
精通 Python:運用簡單的套件進行現代運算(第二版)
之前開始入坑python時就是用這本打底的(有換封面過)
這本書除了前幾張介紹基本的語法之外
後續幾張開始介紹與python相關的延伸性的功能
非常適合程式設計初學者以及剛要開始學習這個語言的讀者
羅列以下幾點關於本書大綱供大家參考
- 學習簡單的資料類型、基本數學運算與文字操作
- 以Python的內建資料結構處理資料
- 探索Python程式碼結構,包括函式的使用
- 使用模組與套件編寫大型Python程式
- 深入討論物件、類別與其他物件導向功能
- 檢視一般檔案、關聯式資料庫與NoSQL的儲存機制
- 使用Python建構web用戶端、伺服器、API與服務
- 管理系統工作,例如程式、程序與執行緒
- 瞭解並行處理與網路程式設計的基礎
流暢的 Python:清晰、簡潔、有效的程式設計
適合已經有Python程式語言基礎的人
這本書更詳細的介紹有關python的用法
讓我們寫的程式可以更加"Pythonic"
建議可以與英文版同時閱讀
以後在查閱stackoverflow文獻的時候能不因語言而產生隔閡
- Python 資料模型:瞭解特殊方法是讓物件具備一致行為的關鍵
- 資料結構:充分使用內建的型態,並瞭解 Unicode 時代中,文字 vs. bytes 之間的關係
- 函式就是物件:見識 Python 函式是一級物件,並瞭解這個事實如何影響熱門的設計模式
- 物件導向的習慣用法:學習參考、可變性、介面、運算子多載與多重繼承,並建構類別
- 控制流程:藉由 concurrent.futures 與 asyncio 套件,來充分活用情境管理器、產生器、協同程序與並行
- 中繼編程:瞭解特性、屬性描述器、類別修飾器與中繼類別的工作原理
演算法圖鑑
直觀理解,從基礎開始學習,全圖像化step by step,讓不懂程式的人也能利用圖形了解各種演算法的特質跟運作.
雖然內容並沒有程式實作
但內容演算法流程圖片非常精美
非常適合用來教學或以圖像的方式了解演算法的運作!
Python 自動化的樂趣:搞定重複瑣碎&單調無聊的工作(第二版)
如果想使用自動化來增強工作流程效率,大推本書
之前這本書只有英文版
在博客來等了1個月還是沒等到
沒想到在2020/08/28 出了中文版
二話不說馬上看看人家都是怎麼用python來完成例行公事的
除了運用Python寫出程式,在幾分鐘內搞定人工手動處理需要花費數小時的工作。
探索Python豐富的模組程式庫來完成某些特定工作
例如從網站上抓取資料、讀取PDF和Word文件,以及自動化執行滑鼠點按和鍵盤輸入的工作。
‧在一個或多個檔案中搜尋文字
‧建立、更新、搬移和重新命名檔案和資料夾
‧搜尋網頁和下載網路上的圖文內容
‧處理PDF檔的分割與合併,加入浮水印和加上密碼等作業
‧傳送Email和簡訊
‧填寫線上表單
- 【SSH】製作SSH key教學製作SSH key 1. 打開終端機(Bash/Terminal) 2. 輸入指令 3. 將指定的 SSH 私 … 閱讀全文
- 【快速架站】什麼是Hexo? 5分鐘快速架站教學What is Hexo? Hexo 是一個快速、簡單且強大的網誌框架。Hexo 使用 Markdown(或其 … 閱讀全文
- 【Python】Quick Sort 快速排序|演算法介紹、新手快速入門目錄 基本概念實際應用線上學習平台推薦udemy推薦入門書籍精通 Python:運用簡單的套件進行現代運算(第 … 閱讀全文
- 【Python】Insertion Sort 插入排序|演算法介紹、新手快速入門目錄 基本概念實際應用線上學習平台推薦udemy推薦入門書籍精通 Python:運用簡單的套件進行現代運算(第 … 閱讀全文
- 【Python】Selection Sort 選擇排序|演算法介紹、新手快速入門目錄 基本概念實際應用線上學習平台推薦udemy推薦入門書籍精通 Python:運用簡單的套件進行現代運算(第 … 閱讀全文
在〈【Python】Bubble Sort 泡沫排序|演算法介紹、新手快速入門〉中有 2 則留言