常見的排序演算法
氣泡排序(bubble sort)
選擇排序(selection sort)
插入排序(insertion sort)
快速排序(quick sort)
希爾排序 (shell sort)
歸併排序 (merge sort)
冒泡演算法的思想
氣泡排序演算法的運作如下:
比較相鄰的元素。如果第乙個比第二個大(公升序),就交換他們兩個。
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。
針對所有的元素重複以上的步驟,除了最後乙個。
持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
下面來用python實現氣泡排序
分析一下上面的程式可以得出:#_*_coding:utf-8_*_
defbubble_sort
(a):
#a is a list
ifnot a:
return
length =
len(a)
for i in
range(0
, length -1)
:for j in
range(0
, length - i -1)
:if a[j]
> a[j+1]
: a[j]
, a[j+1]
= a[j+1]
,a[j]
if __name__ ==
'__main__'
: list1 =[34
,12,1
,8,9
,19,12
(list1)
bubble_sort(list1)
(list1)
1.時間複雜度o(n^2)
2. 如果原來的序列本來就是有序的話,如果按照上述演算法,時間複雜度依舊是o(n^2), 對此可以進行演算法優化,可以加入內迴圈計數器用來記錄交換的次數,如果內迴圈計數器始終為零,則表示該數列是有序的,就不用進行外迴圈了,演算法複雜度可以o(n)
優化演算法實現為:
冒泡演算法時間複雜度總結#_*_coding:utf-8_*_
defbubble_sort
(a):
#a is a list
ifnot a:
return
length =
len(a)
for i in
range(0
, length -1)
:**count =0**
for j in
range(0
, length - i -1)
:if a[j]
> a[j+1]
: a[j]
, a[j+1]
= a[j+1]
,a[j]
**count +=1**
**if count ==0:
return
**if __name__ ==
'__main__'
:#list1 = [34,12,1,8,9,19,12]
list1 =[1
,2,3
,4,5
(list1)
bubble_sort(list1)
(list1)
最優時間複雜度:o(n) (表示遍歷一次發現沒有任何可以交換的元素,排序結束。)
最壞時間複雜度:o(n2)
穩定性:穩定
氣泡排序(python實現)
coding utf 8 created on tue jul 4 11 37 19 2017 data list cnt num all 0 def data in func data list,cnt num all while true judge continue input 請選擇是輸入資...
氣泡排序(Python實現)
氣泡排序 bubble sort 是一種電腦科學領域的較簡單的排序演算法。它重複地走訪過要排序的元素列,一次比較兩個相鄰的元素,如果他們的順序 如從大到小 首字母從a到z 錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素已經排序完成。這個演算法的名字由來是因為...
Python實現氣泡排序
氣泡排序 bubble sort 是最容易理解的排序演算法之一,但是執行效率有點低。冒泡過程 對待排序部分 假設有m個元素 從頭開始進行兩兩比較,如果第乙個比第二個大 公升序 就交換他們兩個。這樣本輪排序結束後就可以保證值最大的元素在最右邊,那麼下次只需要對前面 m 1 個數進行冒泡。完整的氣泡排序...