排序演算法(二) 氣泡排序

2021-08-03 23:23:50 字數 1949 閱讀 3463

每一趟排序(例如第 i 趟,其中 i = 0, 1, …, n - 2),依次比較相鄰兩個資料元素,如果發生逆序,則交換之;待排資料的最大值 「沉」 到待排資料的最底部,(比如 i = 0 時,為第 1 趟排序,資料元素最大者將被交換到最後乙個位置;i = 1 時,為第 2 趟排序,資料元素次大者將被交換到最後第二個位置),直至全部待排序的資料元素排完。由於排到 n - 1 趟時,後 n - 1 個元素已然有序,則剩餘的乙個元素自然也有序,因此一共需要排 n - 1 趟(外層迴圈 n - 1 次)。設整個待排記錄序列有 n 個記錄,則第 i 趟氣泡排序從 0 到 n - i - 1,因為第 i 趟排序時,後 i 個資料已經排好序,不需要再進行排序比較,只需與前 n - i - 1 個元素進行比較(內層迴圈從 0 到 n - i - 1)。

二、**及注釋:

void bubblesort(int n, int *arr)

} }}

三、演算法效能分析:

當輸入規模為 n = 10000、20000、30000、40000、50000 時,執行程式,可以得到在不同輸入規模下,20 組隨機樣本資料執行氣泡排序的單組執行時間及平均執行時間為:

理論上來說,氣泡排序的時間複雜度為 o(n^2)。同時,由上圖可以看出,當 n = 10000 時,20 組樣本排序的平均執行為 126.563 ms。以輸入規模為 10000 的資料執行時間為基準點,則理論上的平均執行時間為:t = k * n^2,(k 為常數),帶入 t = 126.563 ms、n = 10000,可得:k = t / n^2 =126.563 / 100002 。

所以,在相應輸入規模下,氣泡排序的理論執行時間為:

根據上表,可以作出氣泡排序理論效率曲線和實測效率曲線如下:

如上圖表,是氣泡排序的理論效率曲線和實測效率曲線,其中位於上方的資料標籤是實測效率曲線的標註,位於下方的資料標籤是理論效率曲線的標註。由圖表我們可以看出,在問題規模較小時,理論消耗時間和實際消耗時間相近,而隨著輸入規模的增大實際消耗的時間與理論消耗時間的差距越來越大。

首先,不管是理論效率曲線還是實測效率曲線,都大致滿足拋物線 y = k * n2 在某個定義域的一段曲線(其中 k 為係數,兩條曲線的係數 k 有所差別)。這同樣與我們的理論認知也是相一致的。

在氣泡排序過程中,若初始序列為正序,則只需進行一趟排序,在這趟排序中需進行 (n - 1) 次比較操作,但不移動資料元素,這樣便是氣泡排序最好的時間複雜度 o(n);但若初始序列為逆序,則需要進行 (n - 1) 趟排序,每趟排序要進行 (n - i) 次比較操作,且每次比較都必須有 3 次移動操作來完成資料元素的交換,這種情況下,比較操作的次數為 n (n - 1) / 2,而移動操作的次數為 3n (n - 1) / 2,這樣氣泡排序最壞的時間複雜度為 o(n

2)。因此,總的時間複雜度為 o(n

2),這應當是理論效率曲線所反映出來的。

而實測效率曲線與理論效率曲線在趨勢上基本相符,在規模較小時,二者吻合得較好,但規模較大時實際消耗時間則高於理論消耗時間,且隨著輸入規模的增大,實際消耗時間與理論消耗時間的差距越來越大。同時,仔細一點可以注意到,在同樣的問題規模下,氣泡排序耗時是選擇排序的幾倍多,這與排序演算法思想有關。選擇排序在執行比較操作時記錄下位置,確定最終位置後才進行一次移動(交換)操作,而氣泡排序在比較操作時一旦滿足條件就進行移動(交換)操作,相比選擇排序多了很多移動操作。這在問題規模小時影響還不是很大,但規模一旦增大便凸顯出來了。同樣地,實際耗時與理論耗時的差距,也是由大量的移動賦值操作拉開的。當然實測耗時也同樣與程式執行時電腦的cpu的資源利用有關。

python排序演算法 二 氣泡排序演算法

實現方法二 實現方法三 測試與對比 氣泡排序複雜度分析 對順序表 data 作交換排序 氣泡排序初級版 這段 嚴格意義上說,不算是標準的氣泡排序演算法,因為它不滿足 兩兩比較 相鄰記錄 的氣泡排序思想,它更應該是最最簡單的交換排序而已。它的思路就是讓 每乙個關鍵字,都和它後面的每乙個關鍵字比較,如果...

排序演算法之二 氣泡排序

氣泡排序 bubble sort 的演算法原理如下 從第乙個元素開始,每兩個元素進行比較,將較大的元素放在後面 比較之後,進行下一對比較 一直到最後乙個元素,這樣得到的最後乙個元素就是整個陣列裡面的最大值,這個過程就稱之為冒泡。以這種方式對剩餘的元素進行冒泡,最後就得到了排好序的陣列序列。氣泡排序法...

Python排序演算法(二) 氣泡排序

有趣的事,python永遠不會缺席!如需 請註明出處 小婷兒的python 氣泡排序 bubble sort 是一種電腦科學領域的較簡單的排序演算法。它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,一層一層的將較大的元素往後移動,其現象和氣泡在上公升過程中慢慢變大類似,故成為氣泡排序。舉個例子...