資料結構 知識點8 氣泡排序

2021-10-24 07:37:00 字數 2493 閱讀 5668

2)優化版

穩定性:如果乙個排序演算法是穩定的,當有兩個相等鍵值的記錄r和s,且在原本的列表中r出現在s之前,在排序過的列表中r也將會是在s之前

比如:假設以下的數對將要以他們的第乙個數字來排序

(4,1) (3,1) (3,7) (5,6)

在這個狀況下,有可能產生兩種不同的結果,乙個是讓相等鍵值的記錄維持相對的次序,另乙個則沒有

維持次序:(3,1)(3,7)(4,1)(5,6)

次序被改變:(3,7)(3,1)(4,1)(5,6)

即,(3,1) 原來就在(3,7)之前,排序後(3,1)始終都在(3,7)之前為穩定的排序演算法

我們比較的是3,無關於後面的7和1,如果排序後(3,1)和(3,7)順序改變,則為不穩定演算法

是一種簡單的排序演算法

氣泡排序演算法的步驟:

交換過程圖示(第一次):

那麼我們需要進行n-1次冒泡過程,直到所有的元素都輪一次

兩次遍歷中:

第一次為判斷每個值與其他值的大小的迴圈;

第二次為當前值與其他值的比較的迴圈。

第二次在第一次的基礎下,第一次迴圈到哪個數時,第二次的次數就是這個數之前的個數-1

def

bubble_sort

(alist)

: n=

len(alist)

# 共要排列多少次

for i in

range

(n-1):

# 班長從投走到尾,一次排列的迴圈

for j in

range

(n-1

-i):

if alist[j]

>alist[j+1]

: alist[j]

,alist[j+1]

=alist[j+1]

,alist[j]

if __name__ ==

'__main__'

:list=[

44,54,

73,23,

1,2,

53,67,

88,32,

21]print

(list

) bubble_sort(

list

)print

(list

)

結果:

[44,

54,73,

23,1,

2,53,

67,88,

32,21]

[1,2

,21,23

,32,44

,53,54

,67,73

,88]

時間複雜度
import time

defbubble_sort

(alist)

: n=

len(alist)

# 共要排列多少次

for i in

range

(n-1):

# 班長從投走到尾,一次排列的迴圈

count=

0for j in

range

(n-1

-i):

if alist[j]

>alist[j+1]

: alist[j]

,alist[j+1]

=alist[j+1]

,alist[j]

count +=1if

0== count:

# 新增乙個count,需要交換時,也就是兩個數的順序不滿足條件時,+1

# 當count為0時表示前面的元素都是滿足順序的,沒有經過交換

# 因此在後續的迴圈中不再需要作比較

return

if __name__ ==

'__main__'

:list=[

44,54,

73,23,

1,2,

53,67,

88,32,

21]print

(list

) bubble_sort(

list

)print

(list

)

結果:

[44,

54,73,

23,1,

2,53,

67,88,

32,21]

[1,2

,21,23

,32,44

,53,54

,67,73

,88]

時間複雜度

此時,如果出現最優複雜度的序列時,就不會再按照**每個元素都遍歷

資料結構 知識點

定義 度 兒子數 分支節點 除了根和葉子的節點 根的深度為1 資料結構的分類 資料結構分為邏輯結構和物理結構。邏輯結構 表現資料之間的關係的一種資料結構,分為線性結構和非線性結構。物理結構 表現資料如何儲存的一種資料結構,通常分為順序結構 鏈式結構 索引結構和雜湊結構。有序表,也叫有序線性表,資料按...

資料結構知識點

1 線性結構與非線性結構 線性結構 線性表,棧,隊 乙個根節點,最多乙個前節點乙個後節點 首節點無前節點,尾接點無後節點 非線性結構 樹形結構,圖形結構 線性表 由一組資料元素構成,資料元素的位置只取決於自己的序號 陣列 棧 限定只能在表的一端進行插入和刪除,先進後出,只能在棧頂進出 佇列 只能在表...

資料結構,知識點

二叉樹 定義 二叉樹在圖論中是這樣定義的 二叉樹是乙個連通的無環圖,並且每乙個頂點的度不大於3。有根二叉樹還要滿足根節點的度不大於2。基本概念 二叉樹是遞迴定義的,其結點有左右之分,邏輯上二叉樹有五種基本形態 1 空二叉樹 2 只有乙個根節點的二叉樹 3 只有左子樹 4 只有右子樹 5 完全二叉樹。...