排序演算法系列 氣泡排序

2021-10-01 06:49:29 字數 2435 閱讀 3830

氣泡排序是是一種比較基礎簡單的演算法。

它的原理是通過對比前後的元素大小,將較大的數換到後面的方式來實現排序 。

舉個例子:

假如現在有乙個無序陣列disorder_arr = [4,2,19,10,-1]

第一步:

取第0個元素4,和第1個元素2

對比,發現42大。

第二步:

交換42的索引。

即第0個元素為2,第1個元素為4disorder_arr =[2,4,19,10,-1]

第三步:

取第1個元素4,和第2個元素19

對比,發現4小於19

第四步:

保持索引不變。

重複上面步驟

遍歷n-1次數組,會將陣列中最大的數換到陣列最後面的位置。

然後重頭開始遍歷,遍歷n-2次數組。

為什麼是n-2次呢?

因為最大的數已經在最後了,不需要再判斷多一次了,

所以是n-2次。

這次會將第二大的數放置在倒數第二個索引上。

**依然是使用python3實現的

通常所見到的氣泡排序都是這種實現,用了兩層迴圈。

時間複雜度為o(n^2)

def

bubble

(self, disorder_arr:

list):

for i in

range

(len

(disorder_arr)):

# 遍歷n次數組

for j in

range

(len

(disorder_arr)

- i -1)

:# 遍歷n-i-1個陣列的元素

if disorder_arr[j]

> disorder_arr[j +1]

:# 對比當前數與下乙個數

temp = disorder_arr[j]

disorder_arr[j]

= disorder_arr[j +1]

disorder_arr[j +1]

= temp

return disorder_arr

還有乙個比較特別的實現,只用了一層迴圈

def

bubble2

(self, disorder_arr:

list):

team =

len(disorder_arr)-1

i =0while i < team:

# 遍歷n-1個元素,直到team等於i,即team=0

if disorder_arr[i]

> disorder_arr[i +1]

:# 對比當前數與下乙個數

temp = disorder_arr[i]

disorder_arr[i]

= disorder_arr[i +1]

disorder_arr[i +1]

= temp

if i == team -1:

# 如果遍歷到了最後乙個元素,則重置i的值,並給team減1

i =-1

team -=

1 i +=

1return disorder_arr

乍一看,感覺時間複雜度是o(n)

但玄機在於迴圈下面的if i == team - 1:這個判斷,

當遍歷到陣列末尾的時候,會將i的值重置,

因此這個實現的時間複雜度依然是o(n^2)

在氣泡排序中,首先需要遍歷n-1次數組,然後要執行n次這種操作。

因此它的時間複雜度為o(n^2)

那麼它是乙個穩定的演算法嗎?

如果進行比較的時候,兩個數相等,那麼演算法將不會對他們進行交換索引,

因此它是穩定的。

以上**已上傳至[github][

排序演算法系列 氣泡排序

對陣列array n 其陣列長度為n,元素索引0 n 1,對其進行公升序排序,針對n 10時,可選擇氣泡排序 氣泡排序要點 1.氣泡排序有兩層迴圈,外層迴圈用來計算有多少個數i不再需要比較,記憶體迴圈負責從index0 index n i 1 將相鄰元素進行比較和交換,簡單來說,第一輪排序時,內層比...

演算法系列 氣泡排序

在我們的生活中,撲克牌應該是每乙個人的娛樂專案之一吧。在我們玩撲克牌的過程中,我們也可以體會到學習的奧秘。我們會根據手裡的牌,從小到大進行排序 即小的牌在前面,大的牌在後面 在這個過程中,我們可以體會並學習氣泡排序的神奇。氣泡排序 臨近的數字兩兩進行比較,按照從小到大或者從大到小的順序進行交換,這樣...

排序演算法系列之氣泡排序

核心思想 氣泡排序是一種典型的 交換排序 通過比較相鄰元素大小來決定是否交換位置 如上圖所示,以一組資料 為例,進行氣泡排序的演算法演示 氣泡排序 c void swap int a,int b void bubblesort vector vi 演算法改進說明 1,對於是否已經是有序排列進行判斷 ...