資料結構之氣泡排序

2021-10-09 17:05:06 字數 1386 閱讀 1377

排序演算法的穩定性:

在序列中存在幾個資料相同的資料,經過排序之後這幾個資料出現的順序依舊沒發生改變,則稱該演算法為穩定的排序演算法,否則為不穩定的排序演算法。

排序演算法的空間複雜度:

排序演算法在排序過程中消耗的記憶體可以通過其空間複雜度表現,特指空間複雜度o(1)的排序演算法為原地排序。

氣泡排序的主要原理就在於從序列的最低部開始,與之上位的資料進行大小比較,如果上位的資料小於低位的則發生一次資料交換,如果沒有則遞進到上位與之上位的元素進行比較,直到序列的頂端為止,因此第一次比較的次數為n-1次,到達頂端後重新回到最底端,同樣的方法,第二次則只需要比較到n-2的高處…以此類推從最開始到冒泡結束為1+2+3+····+(n-1)的比較次數,當滿足條件時則進行一次資料交換。

void

swap

(int arr,

int a,

int b)

void

buddlesort

(int arr,

int n)

}}

穩定性分析:由於氣泡排序的操作物件是相鄰的兩個資料元素,因此氣泡排序中相同的元素只會排在首次出現該元素的順序之後,排序的條件是a[前] < a[後] 才會發生交換的情況,因此氣泡排序是穩定的排序演算法空間複雜度分析:在**中,僅僅只需要臨時開闢3個常量級的變數即可進行排序演算法的實現,因此氣泡排序的空間複雜度為o(1),屬於原地排序的範疇時間複雜度分析:無論最好情況還是最壞情況下,氣泡排序需要走的流程都已在上述原理中說明,巢狀迴圈都走一遍,因此原始的氣泡排序的時間複雜度為o(n²),下一部分則可以優化該缺點。

通過上樹的時間複雜度分析可以得知,不管序列是否為公升序(最好)還是降序序列(最壞),其時間複雜度都為o(n²),那麼有沒有渠道可以優化該演算法呢?

通過演算法進一步的分析可以看出,為何氣泡排序越到最後比較次數越少,而不是一直冒泡冒到最頂層,原因就在於最大值已經冒泡到最上層,因此多做的比較都是無用功,每進行一次迴圈都會減少冒泡的次數,因此加入從底層到冒泡點都沒有做資料交換,那麼就可以認為序列已經是公升序序列了,剩下的冒泡迴圈便可以省略直接結束排序演算法,因此可以得到以下的優化版的氣泡排序。

void

buddlesort

(int arr,

int n)}if

(token ==

false

)break;}

}

資料結構 排序之氣泡排序

資料結構 排序 可以通過理解各個排序演算法的不變性來加深對演算法的理解 氣泡排序bubblesort 不變性 out右邊的所有資料項都是有序的。out為outer loop外迴圈體中的變數。the point for out arrlen 1 out 1 out the code public cl...

資料結構之排序 氣泡排序

簡介 氣泡排序屬於交換排序的一種。交換排序就是根據序列中兩個元素關鍵字的比較結果來對換這兩個記錄在序列中的位置。交換排序的演算法有很多,著重需要掌握的有氣泡排序和快速排序。基本思想 長為n的序列表,從前往後 或從後往前 兩兩比較相鄰元素的值,若為逆序,則交換他們,知道所有序列比較完。每一趟冒泡都會將...

資料結構之氣泡排序

2.編寫乙個氣泡排序的演算法,並且在main函式中驗證其功能已實現 氣泡排序 bubble sort 的基本思想,設想排序r 1 到r n 垂直放置,將記錄 r i 看作是重量為r i key的氣泡 根據氣泡不能在重氣泡之下的原則,從下往 上掃瞄陣列r,凡違反原則的輕氣泡,就使其向上 飄浮 如此反覆...