C 語言實作氣泡排序法 (Bubble Sort)

Justin
2 min readMar 7, 2020

排序在演算法裡面算是一個很基本的問題,雖然現在各種強大的程式語言都會自帶排序演算法的函式庫,但總還是會遇到需要自己刻一個排序演算法的時候。這篇會說明氣泡排序法 (Bubble Sort),我個人覺得這是最直觀的一個排序演算法,選擇使用 C 語言實作的原因是因為它不像其他程式語言那麼強大有很多方便的函式庫可以使用,加上我好久沒有寫 C 了,所以藉這個機會來複習一下如何用 C 寫一個氣泡排序法 (Bubble Sort)

氣泡排序法 (Bubble Sort) 概念

給定一組數列,對這個數列進行巡訪,當目前這個數字大於後面數字時,就將這兩個數字交換,如此一來,當這次巡訪完之後,最大的數字就會移到最後一個。接著,再從頭開始重新巡訪此數列,重複剛剛的動作,第二輪巡訪完之後,就會將第二大的數字移到倒數第二個,不斷重複此動作,直到第一個數字就是我們的移動目標位置,這樣整個數列就由小到大排序完成了。

進階:若其中某一輪巡訪數列後發現沒有任何數字需要做交換,就可以直接停止巡訪數列了。

氣泡排序法 (Bubble Sort) 實作

編譯並執行上面的程式碼後會有以下結果:

before sorting:
24 17 39 2 13 26 5 10
after sorting:
2 5 10 13 17 24 26 39

分析

時間複雜度:最壞情況是一開始的數列是由大到小依序排列,如此一來要走 n 輪的巡訪(n 是數列中的個數),每一輪要兩兩比較 n 次,時間複雜度是 O(n^2)。最好情況是一開始的數列是由小到大依序排列,這樣還是需要走一輪巡訪,兩兩比較共 n 次,所以時間複雜度是 O(n)

空間複雜度:演算法會使用到的空間不會因為要排序的個數而有所改變,所以空間複雜度為 O(1)

若數列中有兩個一樣的數字,那麼在排序前這兩個數字的排列順序在排序之後依然一樣,則稱此排序為穩定排序,氣泡排序法 (Bubble Sort) 就是一個穩定排序。

--

--