氣泡排序歷史研究及教學指引

更新於 發佈於 閱讀時間約 6 分鐘

為什麼突然研究氣泡排序?

每學期我都會教高一學生氣泡排序。然而有一天我和朋友聊天,發現有很多不同版本的氣泡排序,於是我深入研究,探索氣泡排序的歷史。

另外,原本用英文寫,但發現這個平台應該大部分是讀中文,於是又翻譯了自己的文章改為中文版。

我們所知道的氣泡排序

氣泡排序是一種非常常見且易於學習的演算法。假設你要對一組數字進行排序,並希望按從小到大的順序排列。然後,你從左邊開始比較相鄰的數字,如果順序不正確(在這種情況下,左邊的數字大於右邊的數字),就交換它們。我們稱之為一個階段。我們最多可以重複這個過程 n-1 次;然後,數組將被排序。

我們可以將虛擬碼寫作如下:

重複 n-1 次:
對於索引 i 從第一個到最後第二個:
如果 array[i] > array[i + 1]:
交換這兩個數字的位置。

大家可能聽過許多其他版本,特別是上面的稍微改進版本。也就是在第 k 階段,我們從第一個數字比較到第 n-k 個數字。

所以虛擬碼修訂為:

重複 n-1 次:
對於索引 i 從第一個到第 n-k 個索引:
如果 array[i] > array[i + 1]:
交換這兩個數字的位置。

氣泡排序的歷史

我朋友有次告訴我,最原始的版本是“從後面開始比較”而不是我們通常學習的“從前面開始比較”。

因此,我去查找氣泡排序的歷史及其原始論文。這裡有兩篇關鍵論文:

1. Sorting on Electronic Computer Systems,Edward Harry Friend,1955年。

2. A Programming Language,Kenneth E. Iverson,1962年。

Friend [1] 使用“交換”來描述氣泡排序。此外,他指出排序從開始開始,也就是“從前面開始”。

At the beginning of each pass the first abbreviated item is compared with the second and the smaller assumes first position.

另一方面,Iverson [2] 首先提出了“氣泡排序”這個詞,並指出比較從數字的底部開始,較小的數字向上移動,也就是“從後面開始”。

The basic operation of the bubble sort is the comparison and possible transposition of a pair of adjacent items so as to place the smaller of the two keys earlier in the sequence. The first stage consists of such operations performed in sequence on the item pairs (xᵥ₋₁, xᵥ), (xᵥ₋₂, xᵥ₋₁), ⋯, (x₁, x₂) .
Iverson, 1962

Iverson, 1962

一些事實:

  • 考慮效率,向上和向後之間沒有差別。
  • 原始的“氣泡排序” [2] 是從後面開始比較而不是我們通常知道的從前面開始比較。
  • 兩篇論文都有設定終止條件,即在過程中如果向量已經排序,則終止過程。這通常在教科書中介紹氣泡排序時不會提到。

如何正確介紹氣泡排序

那麼,根據這兩篇論文,如何正確介紹氣泡排序呢?以下是我的觀點及建議。

首先,解釋氣泡排序的核心概念,即通過比較相鄰的數字來排序向量,如果順序不是我們想要的,則進行交換。這一概念源自 Friend [1] 的交換(Exchanging)。

其次,說明 Iverson [2] 的歷史,他首次提出“氣泡排序”這個詞。想像一下海底有許多氣泡,從底部開始,較輕的上升,較重的下沉。這意味著我們從最後一個數字開始比較,最終向量變為由小到大。此時,如果你不打算寫程式或解釋如何實作,我認為 Iverson 的版本更容易理解為什麼叫做“氣泡排序”。

第三,如果你想繼續實作,可以選擇從後比較,或從前比較。在這裡,我經常以從前比較的方式教我的學生。

教學指導

以下是我逐步教學生氣泡排序概念的示例。

第一個是效率的折衷版本,非常容易理解,但同時浪費時間。(但 CPU 運行得非常快,所以這不重要。)

nums = [1, 2, 9, 8, 3]
n = len(nums)
t = 0
for k in range(n - 1):
    for i in range(n - 1):
        t += 1
        if (nums[i] > nums[i + 1]):
            nums[i], nums[i + 1] = nums[i + 1], nums[i]
print(f'{nums = }, 比較 {t} 次.')
# nums = [1, 2, 3, 8, 9], 比較 16.

接下來我會說,正如我們在第 k 階段所見,最大的 k-1 個數字是固定的,所以我們不需要比較它們。

nums = [1, 2, 9, 8, 3]
n = len(nums)
t = 0
for k in range(n - 1):
    for i in range(n - k - 1):
        t += 1
        if (nums[i] > nums[i + 1]):
            nums[i], nums[i + 1] = nums[i + 1], nums[i]
print(f'{nums = }, 比較 {t} 次.')
# nums = [1, 2, 3, 8, 9], 比較 10.

最後,在某些情況下,向量已經排序,在一個階段內沒有交換,然後我們可以終止它,這樣可以進一步優化。

nums = [1, 2, 9, 8, 3]
n = len(nums)
t = 0
for k in range(n - 1):
    hasSwapped = False
    for i in range(n - k - 1):
        t += 1
        if (nums[i] > nums[i + 1]):
            hasSwapped = True
            nums[i], nums[i + 1] = nums[i + 1], nums[i]
    if not hasSwapped:
        break
print(f'{nums = }, 比較 {t} 次.')
# nums = [1, 2, 7, 8, 9], 比較 9.

讀者可以隨意使用這些作為教學材料。但如需商業用途,請聯繫我。


留言
avatar-img
留言分享你的想法!
avatar-img
冠曄的資訊小教室
0會員
5內容數
I'm a senior high school teacher, teaching computer science. Here I will share my concept, thoughts and material for technology education.
2025/04/09
我出了一本書,書名是:Get A++ in Your C++ Course: A Practical Guide for Beginner 雖然書名是英文,但其實內容是中文。之所以寫這本,是因為我教資訊快要滿四年了,但廠商給的配套本一直以來都不盡人意。
Thumbnail
2025/04/09
我出了一本書,書名是:Get A++ in Your C++ Course: A Practical Guide for Beginner 雖然書名是英文,但其實內容是中文。之所以寫這本,是因為我教資訊快要滿四年了,但廠商給的配套本一直以來都不盡人意。
Thumbnail
2025/03/29
幾天前在國中當數學老師的同學問我:冠曄,我有一個學生錯題統計、也把每個題目變成獨立 PDF 了,你有辦法根據錯題幫每個人合併一個錯題本嗎? 很有趣!我馬上跟他要了範例檔案,然後當天下課就用 AI 做出來了,以網頁形式呈現,有需要的人歡迎自由使用!連結在最文章最下方。
Thumbnail
2025/03/29
幾天前在國中當數學老師的同學問我:冠曄,我有一個學生錯題統計、也把每個題目變成獨立 PDF 了,你有辦法根據錯題幫每個人合併一個錯題本嗎? 很有趣!我馬上跟他要了範例檔案,然後當天下課就用 AI 做出來了,以網頁形式呈現,有需要的人歡迎自由使用!連結在最文章最下方。
Thumbnail
2025/03/28
近期 ChatGPT 更新圖片生成功能,原本用 DALL.E 進行生成,現在改為直接從 GPT-4o 生成。而且可以調整得更細緻。 What's New? 圖片生成雖然很酷,但一直以來遇到一些問題,例如,文字會亂掉、繼續補充說明會跟原圖迥異等。這些在這次的更新都解決了。
Thumbnail
2025/03/28
近期 ChatGPT 更新圖片生成功能,原本用 DALL.E 進行生成,現在改為直接從 GPT-4o 生成。而且可以調整得更細緻。 What's New? 圖片生成雖然很酷,但一直以來遇到一些問題,例如,文字會亂掉、繼續補充說明會跟原圖迥異等。這些在這次的更新都解決了。
Thumbnail
看更多
你可能也想看
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
希望透過條列和簡介,可以更方便讀者選讀自己偏好的主題。
Thumbnail
希望透過條列和簡介,可以更方便讀者選讀自己偏好的主題。
Thumbnail
不要想得太複雜,筆者當年剛開始時,寫作功力也很低,內容往往是擷取閱讀過的片段,硬是加入到文章中。類似填空,自己想了一個概念,然後找可以用的內容填進去。 年紀比較輕的族群,寫出的網文往往有這種特性,這是理所當然的,年齡跟閱讀總量一定有關,所以習慣引經據典,非得要找到大師、師傅、導師的語錄進去。
Thumbnail
不要想得太複雜,筆者當年剛開始時,寫作功力也很低,內容往往是擷取閱讀過的片段,硬是加入到文章中。類似填空,自己想了一個概念,然後找可以用的內容填進去。 年紀比較輕的族群,寫出的網文往往有這種特性,這是理所當然的,年齡跟閱讀總量一定有關,所以習慣引經據典,非得要找到大師、師傅、導師的語錄進去。
Thumbnail
這篇整理了我這個月讀到一些不在我分類中但很不錯內容,我也都有附上來源,如果你想了解我這個月發現了什麼不錯的內容都可以在這裡找到,而且我還會加上我的一點個人回饋 另外每月資訊量不同,造成每一類的內容不一,有的內容會比較多,如果你只想看精選,我會在每一類中都挑出 3 篇我最推的,前面會有星號
Thumbnail
這篇整理了我這個月讀到一些不在我分類中但很不錯內容,我也都有附上來源,如果你想了解我這個月發現了什麼不錯的內容都可以在這裡找到,而且我還會加上我的一點個人回饋 另外每月資訊量不同,造成每一類的內容不一,有的內容會比較多,如果你只想看精選,我會在每一類中都挑出 3 篇我最推的,前面會有星號
Thumbnail
好快來到七月了💦,剛準備完期末考的我花了點時間整理了自己讀書的方式,也趁這個機會分享給有需要的人,雖然我的成績一直以來都沒有到非常好,但是跟身邊的朋友分享完他們都說很受用,於是讓我有想分享一下自己讀書的心得還有一些簡單的方法。
Thumbnail
好快來到七月了💦,剛準備完期末考的我花了點時間整理了自己讀書的方式,也趁這個機會分享給有需要的人,雖然我的成績一直以來都沒有到非常好,但是跟身邊的朋友分享完他們都說很受用,於是讓我有想分享一下自己讀書的心得還有一些簡單的方法。
Thumbnail
以前考試最愛買參考書,參考書的編排通常是重點精華+題目+詳解。 不愛讀課本,只看重點精華就去做題目,以為這樣可以節省時間,做題目的時候模模糊糊,A好像也對,C看起來也很像...,根本沒搞清楚基本原理,又要重頭念一次。 才發現重點要自己整理,整理的過程是釐清內容和鞏固記憶最重要的環節。 整理是一
Thumbnail
以前考試最愛買參考書,參考書的編排通常是重點精華+題目+詳解。 不愛讀課本,只看重點精華就去做題目,以為這樣可以節省時間,做題目的時候模模糊糊,A好像也對,C看起來也很像...,根本沒搞清楚基本原理,又要重頭念一次。 才發現重點要自己整理,整理的過程是釐清內容和鞏固記憶最重要的環節。 整理是一
Thumbnail
這篇來經驗分享,筆者怎樣將之分類,並逐漸融入的過程。首先,當然要曉得自己在讀什麼書,購買的時候都可以先確認,是屬於百科、導讀、科普、專業等等不同層次。像筆者自己出過的兩本《阿共打來怎麼辦》,依照分類屬於科普(軍普),絕不能真的以為你讀完就有專業能力,這本書非但不是專業導讀的層次,連當軍事百科都不行。
Thumbnail
這篇來經驗分享,筆者怎樣將之分類,並逐漸融入的過程。首先,當然要曉得自己在讀什麼書,購買的時候都可以先確認,是屬於百科、導讀、科普、專業等等不同層次。像筆者自己出過的兩本《阿共打來怎麼辦》,依照分類屬於科普(軍普),絕不能真的以為你讀完就有專業能力,這本書非但不是專業導讀的層次,連當軍事百科都不行。
Thumbnail
國小時,接觸課外閱讀很少,到高中會到圖書館看雜誌、倪匡小說,開始有些略設課外閱讀,求學背景被成績內心所綁架,認為考上一間好的高中、大學是自己求學目標,到大學考試完,對於升學考試幻滅,至於為何幻滅這留在結尾分享。 大學到北上求學,大一開學初期到假日時,宿舍人煙罕至,內心也充滿一些孤獨感,為
Thumbnail
國小時,接觸課外閱讀很少,到高中會到圖書館看雜誌、倪匡小說,開始有些略設課外閱讀,求學背景被成績內心所綁架,認為考上一間好的高中、大學是自己求學目標,到大學考試完,對於升學考試幻滅,至於為何幻滅這留在結尾分享。 大學到北上求學,大一開學初期到假日時,宿舍人煙罕至,內心也充滿一些孤獨感,為
Thumbnail
當我們閱讀時,會埋首於文字中,穿梭於知識之間,但在這條知識之路上是否有著一些謎團和誤解呢?讓我們一起啟動這趟奇妙的知識探險之旅,解開迷思,拓展視野,並與他人分享你的閱讀見解和獨特體驗吧!
Thumbnail
當我們閱讀時,會埋首於文字中,穿梭於知識之間,但在這條知識之路上是否有著一些謎團和誤解呢?讓我們一起啟動這趟奇妙的知識探險之旅,解開迷思,拓展視野,並與他人分享你的閱讀見解和獨特體驗吧!
Thumbnail
這是一個分享讀書&考試技巧的部落格,定期更新讀書新法、科學實證的資訊,協助讀者蒐集「如何有效率讀書」的資訊。
Thumbnail
這是一個分享讀書&考試技巧的部落格,定期更新讀書新法、科學實證的資訊,協助讀者蒐集「如何有效率讀書」的資訊。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News