原文:
氣泡排序,有時也稱為下沉排序,是一種簡單的排序演算法,它反覆遍歷要排序的列表,比較沒對相鄰的專案,如果它們的順序不滿足條件則交換它們。重複遍歷列表,知道不需要交換,這時列表就是已排序的。其核心思想是:兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序記錄為止。
比較相鄰的元素。如果第乙個比第二個大,就交換它們兩個;
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣在最後的元素應該會是最大的數;
針對所有的元素重複以上的步驟,除了最後乙個;
重複1~3,直到排序完成。
**實現
import copy
import time
class
bubblesort
(object):
def__init__
(self,li=
none):
self.
list
= li
defswap
(self,li,i,j)
:"""
交換元素,i,j表示下標
"""li[i]
,li[j]
= li[j]
,li[i]
defbubble_sort_******
(self)
:"""
簡單氣泡排序,時間複雜度o(n^2)
"""start = time.clock(
) li = copy.deepcopy(self.
list
) length =
len(li)
for i in
range
(length)
:for j in
range
(i +
1, length)
:# 倒序(length-1)
if li[i]
> li[j]
: self.swap(li, i, j)
end = time.clock(
)print
("執行時間為:%s,排序後序列為:%s"
%(end-start)
,li)
defbubble_sort
(self)
:"""
氣泡排序,時間複雜度o(n^2)
"""start = time.clock(
) li = copy.deepcopy(self.
list
) length =
len(li)
for i in
range
(length)
:for j in
range
(length -
1- i)
:if li[j]
> li[j +1]
: self.swap(li, j, j +1)
end = time.clock(
)print
("執行時間為:%s,排序後序列為:%s"
%(end-start)
,li)
defbubble_sort_advance
(self)
:"""
改進後的氣泡排序,時間複雜度o(n^2)
設定乙個flag,當某一輪沒有發生變化時,證明排序已經有序了。
"""start = time.clock(
) li = copy.deepcopy(self.
list
) length =
len(li)
for i in
range
(length)
: flag =
true
for j in
range
(length -
1- i)
:if li[j]
> li[j +1]
: self.swap(li, j, j +1)
flag =
false
if flag:
break
end = time.clock(
)print
("執行時間為:%s,排序後序列為:%s"
%(end-start)
,li)
if __name__ ==
"__main__"
: li =[5
,3,2
,7,1
,4,6
,9,8
] bs = bubblesort(li)
bs.bubble_sort_******(
) bs.bubble_sort(
) bs.bubble_sort_advance(
)
python描述氣泡排序
氣泡排序 bubble sort 是一種基於交換的排序演算法。重複地遍歷數列,一次比較兩個元素,如果它們的順序錯誤就將其交換。氣泡排序的具體原理如下 比較相鄰的元素。如果第乙個比第二個大,就交換二者 對每一對相鄰元素做同樣的操作,從開始第一對到結尾的最後一對。這步操作後,最後的元素即為最大的數。針對...
氣泡排序(線性描述)
氣泡排序 線性描述 快速排序 線性描述 建設中 總結 這是排序演算法家族中最簡單的演算法,自信的面對他吧。讓我們開始吧 氣泡排序的原理即為遍歷整個陣列,每當遇到後乙個數比前乙個數字更小的情況便交換兩者的值。由此看來最壞的情況便是類似a 6 的情況。我們來分析一下執行過程。首先發現5 6,交換,a 6...
簡明演算法 氣泡排序 javascript描述
懶惰了很久,人有點生鏽,所以寫個演算法系列讓自己腦筋活躍起來。所有範例一律從小到大排序 氣泡排序 給定陣列 var list 54,26,93,17,77,31,44,88,55,20 演算法描述 將第乙個元素與第二個元素對比,此時第乙個元素比第二個元素大,交換他們,這樣較大的元素就位於第二個位置了...