簡單排序:冒泡(交換)排序、選擇排序、插入排序、希爾排序穩定排序與不穩定排序:複雜排序:快速排序、堆積排序、基數排序
合併排序:合併兩個或多個排好序的線性表
穩定排序是指一串數字,進過排列以後,同樣大小的元素保持原有的順序。
不穩定排序就是說,排序後,同樣大小的元素的順序可能發生改變。
例如:排序前有兩個數大小為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 是一種簡單的排序演算法。它重複地遍歷要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。遍歷數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。氣泡排序演算...