氣泡排序是是一種比較基礎簡單的演算法。
它的原理是通過對比前後的元素大小,將較大的數換到後面的方式來實現排序 。
舉個例子:
假如現在有乙個無序陣列disorder_arr = [4,2,19,10,-1]
。
第一步:
取第0
個元素4
,和第1
個元素2
對比,發現4
比2
大。
第二步:
交換4
與2
的索引。
即第0
個元素為2
,第1
個元素為4
,disorder_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,對於是否已經是有序排列進行判斷 ...