Python資料結構 排序

2021-09-13 08:52:07 字數 3025 閱讀 4221

簡單排序:冒泡(交換)排序、選擇排序、插入排序、希爾排序

複雜排序:快速排序、堆積排序、基數排序

合併排序:合併兩個或多個排好序的線性表

穩定排序與不穩定排序:

穩定排序是指一串數字,進過排列以後,同樣大小的元素保持原有的順序。

不穩定排序就是說,排序後,同樣大小的元素的順序可能發生改變。

例如:排序前有兩個數大小為5,分別叫它們5

15_1

51​和5

25_2

52​,排序前5

15_1

51​在5

25_2

52​前面,排序後5

15_1

51​在5

25_2

52​後面,那麼這個排序就是不穩定的。

核心思想:

每次比較相鄰兩個元素的大小,大的交換到後面去。

一次遍歷就可以將最大的元素交換到最後。

時間複雜度:

最好情況為o(n

)o(n)

o(n)

,平均為o(n

2)

o(n^2)

o(n2

),最差為o(n

2)

o(n^2)

o(n2)。

是否是穩定排序:

是。核心思想:

第一次選擇最大的元素,和最後乙個元素交換位置。

第二次選擇前n−1

n-1n−

1個元素中最大的元素和第n−1

n-1n−

1個元素交換位置。

以此類推。

時間複雜度:

最好情況為o(n

2)

o(n^2)

o(n2

),平均為o(n

2)

o(n^2)

o(n2

),最差為o(n

2)

o(n^2)

o(n2)。

是否是穩定排序:

否。核心思想:

先選擇兩個數進行比較大小。然後將第三個數插入到合適的位置,在插入第四個數…直到所有的數都插入。

時間複雜度:

最好情況為o(n

)o(n)

o(n)

,平均為o(n

2)

o(n^2)

o(n2

),最差為o(n

2)

o(n^2)

o(n2)。

是否是穩定排序:

是。核心思想:

將資料分成特定間隔的幾個小區快,每次對相應部分的資料進行插入排序,逐漸縮短距離間隔,直至間隔為1。

時間複雜度:

最好情況為o(n

3/2)

o(n^)

o(n3/2

),平均為o(n

3/2)

o(n^)

o(n3/2

),最差為o(n

3/2)

o(n^)

o(n3/2

)。是否是穩定演算法:

否。核心思想:

選擇資料的第乙個數k為中間數,從左往右找到第乙個比k大的數,從右往左找到第乙個比k小的數,若較大的數的位置在較小的數的前面,交換兩者的位置,一直到若較大的數的位置在較小的數的後面。交換k和較小的數。

整個數列被k分成了2部分,對相應的部分進行相同操作,直到排序完成。

時間複雜度:

最好情況為o(n

log(

n)

)o(nlog(n))

o(nlog

(n))

,平均為o(n

log(

n)

)o(nlog(n))

o(nlog

(n))

,最差為o(n

2)

o(n^2)

o(n2)。

是否是穩定排序:

不是。核心思想:

將資料用最大堆積樹表示,刪除樹根,將剩餘的樹用堆積樹表示,刪除樹根,以此類推。

時間複雜度:

最好情況為o(n

log(

n)

)o(nlog(n))

o(nlog

(n))

,平均為o(n

log(

n)

)o(nlog(n))

o(nlog

(n))

,最差為o(n

log(

n)

)o(nlog(n))

o(nlog

(n))

。是否是穩定排序:

否。核心思想:

將資料按不同的位數進行排序,例如先按個位的大小進行排序,然後再按照十位的大小進行排序,以此類推。

時間複雜度:

最好情況為o(n

logp

(k))

o(nlog_p(k))

o(nlog

p​(k

)),平均為o(n

logp

(k))

o(nlog_p(k))

o(nlog

p​(k

)),最差為o(n

logp

(k))

o(nlog_p(k))

o(nlog

p​(k

))。是否是穩定排序:

是。核心思想:

針對已經排好順序的兩個或者兩個以上的數列,通過合併的方式將其組成乙個大的且排好序的數列。

時間複雜度:

最好情況為o(n

log(

n)

)o(nlog(n))

o(nlog

(n))

,平均為o(n

log(

n)

)o(nlog(n))

o(nlog

(n))

,最差為o(n

log(

n)

)o(nlog(n))

o(nlog

(n))

。是否是穩定排序:

是。合併排序更詳細

參考書籍:《**資料結構–使用python》

部分**

python資料結構 排序

氣泡排序 最優時間複雜度 o n 表示遍歷一次發現沒有任何可以交換的元素,排序結束。最壞時間複雜度 o n2 defbubble sort alist for j in range len alist 1,0,1 for i in range j if alist i alist i alist i...

Python資料結構之排序

def bubble sort li 氣泡排序 for j in range len li 1 0,1 每次遍歷需要比較的次數,逐漸減小 for i in range 0 j 比較相鄰兩數,大的放右邊 if li i li i 1 li i li i 1 li i 1 li i def select...

資料結構 氣泡排序(Python)

氣泡排序 英語 bubble sort 是一種簡單的排序演算法。它重複地遍歷要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。遍歷數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。氣泡排序演算...